Nette 2.1 dev ako ziskat Nette\Latte\Engine?
- duskohu
- Člen | 778
Caute mam nejaky BaseForm a v nom si registrujem:
public function templatePrepareFilters($template)
{
/** @var Nette\Latte\Engine $latte */
$latte = $this->getPresenter()->getContext()->createService('nette.latte');
\Kdyby\BootstrapFormRenderer\Latte\FormMacros::install($latte->getCompiler());
$template->registerFilter($latte);
}
Samozrejme getContext() je FUJ :-), takze som uvazoval ako to riesit, tak som sa rozhodol ze si Engine injectnem z DIC ked uz mame to DIC :-)
* INJECT Engine
* @param Engine $engine
*/
public function injectEngine(Engine $engine)
{
$this->engine = $engine;
}
ale co na mna ladenka zahucala: No service of type Nette\Latte\Engine found tak som sa pozrel do DIC tak tam Engine je nette.latte::Nette\Latte\Engine
samozrejme som sa pozrel aj tu a hele co som nasiel, tak je getContext() deprecated alebo nie?
- Šaman
- Člen | 2640
Form nemá šablonu, ale renderer. Šablonu můžeš vytvářet v tom rendereru (pokud ho píšeš), ale lepší řešení je místo BaseFormu se šablonou používat komponentu, která ten formulář obaluje.
BaseForm používej jen na věci týkající se samotných formulářů (třeba registrace nějakých nových inputů), i když i toto se dá řešit jinak.
- Filip Procházka
- Moderator | 4668
Na tu metodu vůbec nepotřebuješ sahat, makra jdou registrovat v configu a
BootstrapFormRenderer
je i správně v configu registruje, takže
tu metodu smaž. Musí to fungovat samo.
Formulář nemá šablony, raději si ho obal do komponenty
- duskohu
- Člen | 778
BaseForm pouzivam preto, lebo skoro vsetky moje formulare nesluzia len ako
formulare, ale maju aj dalsiu funkcionalitu, napr. dalsie tlacitka, alebo
zobrazovacie prvky, a skoro kazdy formular vyzera inak, takze ho nakoniec
renderujem manualne, preto pouzivam baseForm. Napr:
mam BaseFormControl
zaregistrujem co treba a pomocou nejakej
service najdem vhodnu sablonu. Nasledne potom si podedim nejaky formControl
a vnom mam form
a o ostatne sa nestaram, uz len vsablone urcim vzhlad formulara, a dalsich
prvkov.
- duskohu
- Člen | 778
Oki skusil som to podla tohoto kde som si urobil tovarnicku.
protected function createComponentForm(){
$form = new Form;
$form->setRenderer(new BootstrapRenderer());
.....
return $form;
}
v bootstrap.php som zaregistroval:
Kdyby\BootstrapFormRenderer\DI\RendererExtension::register($configurator);
napriek tomu mi ladenka nadava:
Unknown macro {pair} in ....
to macro pouzivam pri manualnom zobrazovani prvku. Tak co robim zle, ked teda nemusim registrovat Latte\FormMacros?
- Šaman
- Člen | 2640
{pair} není žádné latte makro, použij
{form fooBarForm}
{label fooInput /} {input fooInput} <br>
{label barInput}popis{/label} {input barInput}
{/form}
Editoval Šaman (26. 11. 2013 18:56)
- Šaman
- Člen | 2640
enumag napsal(a):
Sorry, nedošlo mi, že se bavíme celou dobu o Kdyby rendereru.
@duskohu: Tak s tímhle ti neporadím,
BootstrapFormRenderer nepoužívám (i když ho mám v plánu vyzkoušet),
zatím ti mohu jen ukázat, jak bych to dělal v čistém Nette.
Formulář
v komponentě vytvářené generovanou
továrničkou, kterou injectujeme do Presenteru pomocí property
injection. (To injectování by bylo možná lepší řešit inject metodou,
nebo traitou, ale tohle je nejkratší možný zápis.)
Editoval Šaman (26. 11. 2013 19:35)
- Filip Procházka
- Moderator | 4668
Musí to fungovat :)
- nainstaluješ přes composer
- zaregistruješ extension
Kdyby\BootstrapFormRenderer\DI\RendererExtension::register($configurator);
- zaregistruješ renderer
$form->setRenderer(new BootstrapRenderer());
- smažeš cache
- profit
- Jan Suchánek
- Člen | 404
Filip Procházka: Tohle bude je a bude podporovaná cesta registrace extension?
extensions:
bootstrapFormRenderer: Kdyby\BootstrapFormRenderer\DI\RendererExtension
Je lepší registrovat v bootstrapu nebo v neonu?
- enumag
- Člen | 2118
@jenicek: Je to samozřejmě lepší v neonu, to ale funguje až v Nette 2.1. (Nebo pokud se do 2.0 přidá jedno extension postaru tak další už jdou takhle.)
Editoval enumag (26. 11. 2013 23:27)
- duskohu
- Člen | 778
@Šaman presne takto to robim, ale mam este BaseFormControl ktory dedi od Control, nie je to BaseFrorm, ucelom je nastavyt sablonu pre Control, a samozrejme pre toto:
$template->_form = $template->form = $this['form']
@Filip Procházka asi som velmi nepochopil instalaciu, postupoval som tak ze som zaregistroval do bootstrap:
Kdyby\BootstrapFormRenderer\DI\RendererExtension::register($configurator);
a formularu som dal render:
$form->setRenderer(new BootstrapRenderer);
ale ked som v control vytvaral formular tak macra mi nesli az ked som zaregistroval toto
public function templatePrepareFilters($template)
{
/** @var Nette\Latte\Engine $latte */
$latte = $this->getPresenter()->getContext()->createService('nette.latte');
\Kdyby\BootstrapFormRenderer\Latte\FormMacros::install($latte->getCompiler());
$template->registerFilter($latte);
}
nikde som sa nedocital ze treba v neone zaregistrovat extension:
bootstrapFormRenderer: Kdyby\BootstrapFormRenderer\DI\RendererExtension
teraz uz mam zaregistrivane len extension ostatne som vynechal a ide perfektne :-)