Formulář ve vlastní třídě s vlastní šablonou

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

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
+
0
-

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
+
0
-

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.

lampa
Člen | 9
+
0
-

Už se to povedlo díky. Teď právě řeším, že mi nefunguje {control $formular errors} – ma to s tím také spojitost? Budu to tedy muset překopat na Control a továrničku?

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

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)