Formulář v komponentě
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- baal
- Člen | 34
Zdravím,
vytvořil jsem si komponentu menu (potomek control), renderuju v ní 3 menu, z toho 1 je loginForm. Snažím se zpracovat formulář, ale stále se nedaří.
class Menu extends Control {
public function renderLogin() {
$form = new AppForm;
$form->addText('username', 'Uživatel:')
->addRule(Form::FILLED, 'Vyplňte prosím uživatelské jméno.');
$form->addPassword('password', 'Heslo:')
->addRule(Form::FILLED, 'Vyplňte prosím heslo.');
$form->addSubmit('login', 'Přihlásit');
$form->onSubmit[] = array($this, 'handleLogin');
$template = $this->createTemplate();
$template->registerFilter(new CurlyBracketsFilter);
$template->setFile(APP_DIR . '/templates/MenuLogin.phtml');
$template->form = $form;
$template->render();
}
public function renderMenu1() {
$template = $this->createTemplate();
$template->registerFilter(new CurlyBracketsFilter);
$template->setFile(APP_DIR . '/templates/Menu1.phtml');
$template->render();
}
public function renderMenu2() {
$template = $this->createTemplate();
$template->registerFilter(new CurlyBracketsFilter);
$template->setFile(APP_DIR . '/templates/Menu2.phtml');
$template->render();
}
public function handleLogin(AppForm $form) {
debug::dump($form);
}
}
V BasePresenteru pak komponentu vytvořím pomocí
public function createComponentMenu() {
return new Menu;
}
A v layoutu následně
{control menu:Login}
{control menu:Menu1}
{control menu:Menu2}
Formulář nedostane žádnou action. Kde mám tedy chybu? Předem děkuji.
- vlki
- Člen | 218
To samé znovu a znovu. Formulář není připojen ke stromu komponent v okamžiku, kdy dojde ke zpracování parametrů. Řešením je použití továrniček i v komponentách…!
K přečtení:
https://doc.nette.org/…ubleshooting
https://doc.nette.org/…n/presenters#…