Formulář v layout latte se neodešle

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
lukendo
Člen | 96
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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>
lukendo
Člen | 96
+
0
-

Tak z nějakého důvodu to už funguje, asi nějaká cache v prohlížeči :)
Edit: P.S. pokud to funguje v anonymním režimu, tak je to záruka 100% funkčnosti? Děkuji

Editoval lukendo (19. 8. 2016 20:11)