Přihlašovací formulář funkční pouze přes {control signInForm} a ne přes {input …}

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

Zdravím,
narazil jsem na jeden problém, a nechápu proč to dělá. Mám přihlašovací formulář. Když do latte šablony vložím {control singInForm} tak vše funguje bez problémů.
Jakmile ho chci ale trošku nastylovat, tak použiju místo controlu tento kód:

{form signInForm}
    <form role="form">
        <fieldset>
            <div class="form-group">
                {input username}
            </div>
            <div class="form-group">
                {input password}
            </div>
            <div class="checkbox">
                <label>
                    {input remember}
                </label>
            </div>
            	{input send}
        </fieldset>
    </form>
{/form}

Reloadnu přihlašovací stránku – formulář hned vypadá lépe, ale přestane fungovat. Vypisuje třeba, že chybí napsat heslo, nebo mail, ale už nenapíše, že je špatný mail či heslo. A už vůbec mne nepřihlásí.

Čím to je? Děkuji.


zde je SignPresenter.php:

namespace AdminModule;

use Nette,
	App\Model;

use \Nette\Application\UI;
/**
 * Sign in/out presenters.
 */
class SignPresenter extends BasePresenter
{

	/** @var \Nette\Database\Context */
	private $database;

	public function __construct(\Nette\Database\Context $database)
	{
		$this->database = $database;
	}

	/**
	 * Sign-in form factory.
	 * @return \Nette\Application\UI\Form
	 */
	protected function createComponentSignInForm()
	{
		$form = new \Nette\Application\UI\Form;
		$form->addText('username', '')
			->setRequired('Prosím vložtě e-mail')
			->setType('email')
			->setAttribute('class', 'form-control')
			->setAttribute('placeholder', 'E-mail')
			->setAttribute('autofocus');

		$form->addPassword('password', '')
			->setRequired('Prosím vložte heslo')
			->setType('password')
			->setAttribute('class', 'form-control')
			->setAttribute('placeholder', 'Heslo')
			->setAttribute('autofocus');

		$form->addCheckbox('remember', 'Zapamatovat');

		$form->addSubmit('send', 'Přihlásit se')
			->setAttribute('class', 'btn btn-lg btn-success btn-block');

		// call method signInFormSucceeded() on success
		$form->onSuccess[] = $this->signInFormSucceeded;
		return $form;
	}

	public function signInFormSucceeded($form, $values)
	{
		if ($values->remember) {
			$this->getUser()->setExpiration('14 days', FALSE);
		} else {
			$this->getUser()->setExpiration('20 minutes', TRUE);
		}

		try {
			$this->getUser()->login($values->username, $values->password);
			$this->redirect('Tour:');

		} catch (\Nette\Security\AuthenticationException $e) {
			$form->addError($e->getMessage());
		}
	}

	public function actionDefault() {
		$this->redirect('Sign:in');
	}

	public function actionOut()
	{
		$this->getUser()->logout();
		$this->flashMessage('Byl jste odhlášen/a');
		$this->redirect('Sign:in');
	}

}

UserManager:

namespace App\Model;

use Nette,
	Nette\Utils\Strings,
	Nette\Security\Passwords;

/**
 * Users management.
 */
class UserManager extends Nette\Object implements Nette\Security\IAuthenticator
{
	const
		TABLE_NAME = 'account',
		COLUMN_ID = 'id',
		COLUMN_NAME = 'email',
		COLUMN_PASSWORD_HASH = 'password',
		COLUMN_ROLE = 'role';

	/** @var Nette\Database\Context */
	private $database;


	public function __construct(Nette\Database\Context $database)
	{
		$this->database = $database;
	}

	/**
	 * Performs an authentication.
	 * @return Nette\Security\Identity
	 * @throws Nette\Security\AuthenticationException
	 */
	public function authenticate(array $credentials)
	{
		list($username, $password) = $credentials;

		$row = $this->database->table(self::TABLE_NAME)->where(self::COLUMN_NAME, $username)->fetch();

		if (!$row) {
			throw new Nette\Security\AuthenticationException('Uživatelské jméno není správné.', self::IDENTITY_NOT_FOUND);

		} elseif (!Passwords::verify($password, $row[self::COLUMN_PASSWORD_HASH])) {
			throw new Nette\Security\AuthenticationException('Heslo není správné.', self::INVALID_CREDENTIAL);

		} elseif (Passwords::needsRehash($row[self::COLUMN_PASSWORD_HASH])) {
			$row->update(array(
				self::COLUMN_PASSWORD_HASH => Passwords::hash($password),
			));
		}

		$arr = $row->toArray();
		unset($arr[self::COLUMN_PASSWORD_HASH]);
		return new Nette\Security\Identity($row[self::COLUMN_ID], $row[self::COLUMN_ROLE], $arr);
	}

	/**
	 * Adds new user.
	 * @param  string
	 * @param  string
	 * @return void
	 */
	public function add($username, $password)
	{
		$this->database->table(self::TABLE_NAME)->insert(array(
			self::COLUMN_NAME => $username,
			self::COLUMN_PASSWORD_HASH => Passwords::hash($password),
		));
	}

}
David Matějka
Moderator | 6445
+
+2
-

nedavej tam ten vnitrni tag <form>, nette ho vykresluje samo (tim makrem {form})

Desttro
Člen | 126
+
0
-

matej21 napsal(a):

nedavej tam ten vnitrni tag <form>, nette ho vykresluje samo (tim makrem {form})

Děkuji, už to funguje. To Nette fakt myslí na všechno. Ještě jednou moc díky.