Formulář ve vlastní třídě s vlastní šablonou
- lampa
- Člen | 9
Ahoj,
Nějak nemůžu přijít na to, kde dělám chybu když se snažím dát
formulář do samostatné třídy a vykreslovat ho pomocí vlastní
šablony.
Dostávám se pořád na chybovou hlášku „Undefined variable:
_control“
class LoginForm extends \Nette\Application\UI\Form
{
....
public function render()
{
$template = new Nette\Templating\FileTemplate(__DIR__ . '/LoginForm.latte');
$template->registerFilter(new \Nette\Latte\Engine());
$template->formular = $this->name;
$template->render();
}
a v šabloně potom
{form $formular class => 'form-horizontal'}
...
{/form}
přitom když do šablony formuláře napíšu jen nějaký text tak se to vykreslí.
Formulář potom vykresluji makrem
{control LoginForm}
Kde bych měl hledat chybu?
Díky
Editoval lampa (4. 9. 2012 14:30)
- Ot@s
- Backer | 476
Prubni jednodušší postup (zajistí ti mimo jiné chybějící
_control
):
$template = $this->createTemplate();
$template->setFile(__DIR__ . '/LoginForm.latte');
// ....
Editoval Ot@s (4. 9. 2012 14:37)
- Vojtěch Dobeš
- Gold Partner | 1316
Nebo neděď od Nette\Application\UI\Form
, ale od
Nette\Application\UI\Control
, a formulář v té třídě sestavuj
normálně v továrničce, třeba createComponentForm
.
A v šabloně téhle komponenty ho vykresluj makrem
{control form}
. Renderování:
public function render()
{
$this->template->setFile(__DIR__ . '/LoginForm.latte');
$this->template->render();
}
Dědění od formuláře s vlastní šablonou má další úskalí, jako například nefungující snippety apod.
- Vojtěch Dobeš
- Gold Partner | 1316
Ono to není tak velké překopání, má zato samé benefity :). Jdi do toho.
Jestli to má spojení bez Laděnky netuším.
Editoval vojtech.dobes (4. 9. 2012 15:50)