Component with name ‚loginForm‘ does not exist

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

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

David Matějka
Moderator | 6445
+
0
-
Michal Vyšinský
Člen | 608
+
0
-

Prosím o vložení kódu do /--php a /--html

Filip Procházka
Moderator | 4668
+
0
-

Opraveno formátování, smazány nerelevantní příspěvky.

Michal Vyšinský
Člen | 608
+
+2
-

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)

Quinix
Člen | 108
+
-1
-

Nemáš nad třídou místo

use Nette\Application\UI\Form;

náhodou

use Nette\Forms\Form

?

Editoval Quinix (5. 8. 2014 20:47)

Michal Vyšinský
Člen | 608
+
0
-

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.

Karlos
Člen | 6
+
0
-

Kde bych si to mohl ověřit? Popř. kde nastudovat.
Děkuji

Michal Vyšinský
Člen | 608
+
0
-

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ý.

Karlos
Člen | 6
+
0
-

Tak jsem to spustil na starší verzi NetBeans a jiné verzi Nette Frameworku a začalo to šlapat.
Nicméně díky