Component with name ‚loginForm‘ does not exist
- Karlos
- Člen | 6
Ahoj,
snažím rozběhat přihlašování a narazil jsem na tuto chybou hlášku:
Component with name ‚loginForm‘ does not exist
BasePresenter
class BasePresenter extends \App\Presenters\BasePresenter {
/**
* Sign-in form factory.
* @return \Nette\Application\UI\Form
*/
protected function createComponentLoginForm() {
$form = new Form;
$form->addText('email','E-mail:')
->setType('email')
->addRule(Form::EMAIL, 'E-mail má špatný formát.')
->setRequired('Prosím zadejte e-mail.');
$form->addPassword('password','Heslo:')->setRequired('Prosím zadejte heslo.');
$form->addSubmit('send', 'Přihlásit');
$form->onSuccess[] = array($this, 'loginFormSucceeded');
return $form;
}
public function loginFormSucceeded(Form $form) {
$values = $form->getValues();
try {
$this->getUser()->login($values->email, $values->password);
$this->redirect('Homepage:');
} catch (Nette\Security\AuthenticationException $e) {
$form->addError($e->getMessage());
}
}
}
a @layou.latte kde se snažím componentu volat
<body>
<div class="navbar navbar-inverse" role="navigation">
<div class="navbar-collapse collapse">
{if !$user->isLoggedIn()}
{form loginForm, class=>'navbar-form navbar-right'}
<div class="form-group">{input email, class=>'form-control',placeholder=>'Email'}</div>
<div class="form-group">{input password, class=>'form-control',placeholder=>'Heslo'}</div>
{input send, class=>'btn btn-success'}
{/form}
{else}
<ul class="nav navbar-nav navbar-right">
{if $user->isInRole('admin')}
<li><a n:href=":Admin:Homepage:">Administrace</a></li>
{/if}
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">{$user->identity->email}<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a n:href="logout!">Odhlásit</a></li>
</ul>
</li>
</ul>
{/if}
</div>
Prosím o radu
- Michal Vyšinský
- Člen | 608
Jsi si jistý, že je tento BasePresenter použitý? Kód mě připadá
v pořádku.
Hádám, že v nějakém potomkovi BasePresenteru dědíš od
App\Presenters\BasePresenter místo od toho tvého. Jinak BasePresenter je hnus
a mít dva, to už je pořádná prasárna.
Editoval Michal Vyšinský (6. 8. 2014 8:51)
- Michal Vyšinský
- Člen | 608
Kdyby tam měl toto, tak je jiná chybová hláška, že továrna nevrací instanci Control nebo něco takového. Ta jeho chyba je způsobena tím, že nette nikde nevidí tu tovární metodu.
- Michal Vyšinský
- Člen | 608
V tvém kódu. Ale jinak můžeš zkusit přepsat v tom BasePresenteru metodu startup a něco v ní vypsat. Pokud se nic nevypíše, tak není použitý.