Formulář v layout latte se neodešle
- lukendo
- Člen | 96
Zdravím, mám formulář, který chci mít přístupný pro všechny presentery, tudíž jsem ho podle zdejšího příspěvku "":https://forum.nette.org/…yout-sablony vytvořil v BasePresneteru od kterého všechny ostatní dědí, ale i tak se stále neodešle (funkční je, např. v defaultu se odešle). Cache a všechno mám čisté a na závěř ještě jedna otázka. Když mám v Tracy že uživatel je UnLogged, tak proč jsou pořád nastavené údaje jako id, role… To je jenom že se mi nemažou sessions? Díky
- Oli
- Člen | 1215
Proč se ti forumlář neodešle z tohodle popisku nejde poznat. Jak to
máš v šabloně a jak vypadá createComponent
pro vytváření
toho formuláře?
K tomu druhýmu dotazu: Identita
Při odhlášení se identita nesmaže a je nadále k dispozici. Takže ačkoliv má uživatel identitu, nemusí být přihlášený. Pokud bychom chtěli identitu explicitně smazat, odhlásíme uživatele voláním $user->logout(TRUE).
- Barvoj
- Člen | 60
vytvořil v BasePresneteru od kterého všechny ostatní dědí, ale i tak se stále neodešle
Zkus sem hodit nějaký kód..
proč jsou pořád nastavené údaje jako id, role…
Když odhlašuješ uživatele voláním $user->logout()
, tak
se nesmaže identita.
Pokud chceš smazat identitu volej to s parametrem true
. Tedy
$user->logout(true)
.
- lukendo
- Člen | 96
BasePresenter:
<?php
namespace App\FrontModule\Presenters;
use Nette;
use App\Forms;
/**
* Base presenter for all application presenters.
*/
abstract class BasePresenter extends Nette\Application\UI\Presenter
{
/** @var Forms\SignInFormFactory @inject */
public $signInFactory;
public function beforeRender()
{
//na základě isLogged se zobrazuje odkaz přihlásit, odhlásit
$user = $this->getUser();
if (!$user->isLoggedIn())
$this->template->isLogged = true;
else
$this->template->isLogged = false;
}
/**
* Sign-in form factory.
* @return Nette\Application\UI\Form
*/
protected function createComponentSignInForm()
{
return $this->signInFactory->create(function () {
$this->redirect('Homepage:default');
});
}
}
SignFormFactory:
<?php
namespace App\Forms;
use Nette;
use Nette\Application\UI\Form;
use Nette\Security\User;
use Tracy\Debugger;
class SignInFormFactory
{
use Nette\SmartObject;
/** @var FormFactory */
private $factory;
/** @var User */
private $user;
public function __construct(FormFactory $factory, User $user)
{
$this->factory = $factory;
$this->user = $user;
}
/**
* @return Form
*/
public function create(callable $onSuccess)
{
$form = $this->factory->create();
$form->addText('username')
->setAttribute('placeholder', 'přihlašovací jméno')
->setAttribute('class', 'ui input')
->setRequired('Please enter your username.');
$form->addPassword('password')
->setAttribute('placeholder', 'heslo')
->setAttribute('class', 'input')
->setRequired('Please enter your password.');
$form->addCheckbox('remember', 'Zůstat přihlášen');
$form->addSubmit('send', 'Přihlásit se')
->setAttribute('class', 'ui primary button');
$form->onSuccess[] = function (Form $form, $values) use ($onSuccess) {
try {
$this->user->setExpiration($values->remember ? '14 days' : '20 minutes');
$this->user->login($values->username, $values->password);
Debugger::barDump($values);
} catch (Nette\Security\AuthenticationException $e) {
$form->addError('The username or password you entered is incorrect.');
return;
}
$onSuccess();
};
return $form;
}
}
layout.latte:
<div class="right menu">
{if $isLogged}
{control signInForm}
{else}
<a class="item" href="{$basePath}/sign/out">Odhlásit se</a>
{/if}
<a class="item">Nápověda</a>
</div>