jak nastavit šablonu formuláře?
- Šaman
- Člen | 2666
Vzdávám se, po dvanácti hodinách studia formulářů se mi nepodařilo zprovoznit něco takového:
třída formuláře která dědí od AppForm (pokusForm.php)
<?php
...
public function render()
{
$template = new FileTemplate;
$template->setFile(__DIR__ . '/pokusForm.latte');
$template->registerFilter($latte = new LatteFilter());
FormMacros::register($latte->getHandler());
$template->form = $this;
$template->render();
}
...
?>
šablona formuláře (pokusForm.latte)
<?php
{form $form}
<p class="error" n:foreach="$formErrors as $error">{$error}</p>
<table>
<tr>
<th>{label name, text => "Username"}</th>
<td>{input name}</td>
</tr>
{/form}
?>
Registraci maker, včetně těch vylepšených samozřejmě mám.
V presenteru si továrničkou vytvořím komponentu toho formuláře a pak ji
chci vykreslit pomocí {control pokusForm}
. A nestarat se
o šablony, ty by si měl formulář načíst sám. Boužel takto mi to
nešlape.
Zkolabuje to na:
<?php
Undefined variable: control
$formErrors = FormMacros::beginForm($form, $control, array())->getErrors();
?>
Zkoušel jsem do proměnné $form předávat až vytvořenou komponentu po
připojení k presenteru (pomocí monitorování a metody attached) ale taky
bez úspěchu. Přitom volání
{include 'pokusForm.latte', form => $presenter['pokusForm']}
mi
funguje bez problémů.
Tušíte někdo jak na to, pls? Nechci se v šabloně pohledu starat o to, kde mám nějaké šablony každého formuláře na stránce, chci si ho tam prostě vložit a nestarat se (resp. starat se jen když k tomu mám nějaký zvláštní důvod).
P.S. Pokud to přepíšu bez použití vylepšených maker, tak problém přetvává, naprosto stejný..
Editoval Šaman (3. 4. 2011 6:20)
- Filip Procházka
- Moderator | 4668
Řešením je vlastní TemplateFactory, které registruješ jako službu a následně zneužiješ ve formulářích.