Snippet ve formuláři – error 500
- tomees
- Člen | 59
Zdarec, už nějakou dobu se celkem patlám s ajaxovým překreslením jednoho bloku ve formuláři. Jedná se o hodně dlouhý a složitý formulář, proto ho nemohu rozdělit do menších samostatných komponent.
Po pokusu překreslit snippet končím
ErrorException: end() expects parameter 1 to be array, null given in ..
ve vygenerované šabloně konkrétně zde
<td><?php echo end($this->global->formsStack)["attributes-$attr->id"]->getControl() /* line 570 */ ?></td>
toto problém řeší
$this->template->getLatte()->addProvider(‚formsStack‘,
[$this[‚productForm‘]]);
narazil jsem na to zde na fóru,
ale pravděpodobně to není to pravé
protected function createComponentProductAttributesGroupForm()
{
$form = $this->productAttributesGroupFormFactory->create($this->product->id);
$form->onSuccess[] = function () {
if($this->isAjax()) {
$this->template->getLatte()->addProvider('formsStack', [$this['productForm']]);
$this->redrawControl('contentWrapper');
$this->redrawControl('attributes');
} else {
$this->redirect('this');
}
};
return $form;
}
zkusil jsem i snippetArea (contentWrapper), ale výsledek je stále stejný.
Nějaký tip jak na to správně a zda je to v současné verzi Nette vůbec funkční?
Editoval tomees (7. 11. 2017 16:50)
- Šaman
- Člen | 2659
Nemáš tam někde
$this->template->_form = $this['form'];
? To už myslím
v Nette 2.4 nefunguje a není potřeba.
Nedávno jsem si s tím hrál, tak tady
sdílím funkční řešení nad sandboxem Nette 2.4 se snippetAreou.
P.S. Ber to jako rychlý test funkčnosti, ne přímo mustr. Tu snippetAreu
bych teď asi pojmenoval slovem area
, abych pak věděl proč
překresluji form i input (teď, po měsíci, jsem nad tím musel chvíli
přemýšlet. Kdyby se to jmenovalo testFormArea
a
inputCity
, bylo by to srozumitelnější).
Jo a ten data-link
v šabloně tady není nutný, můžeš si
ho vložit přímo do scriptu. Tohle používám, když mám script externí a
šablonu formuláře taky samostatně (nebo se dá upravit renderer a ruční
vypisování šablony pak není ani nutné).
Editoval Šaman (7. 11. 2017 17:26)
- tomees
- Člen | 59
Šaman napsal(a):
Nemáš tam někde
$this->template->_form = $this['form'];
? To už myslím v Nette 2.4 nefunguje a není potřeba.
Nedávno jsem si s tím hrál, tak tady sdílím funkční řešení nad sandboxem Nette 2.4 se snippetAreou.
nene nic takového nikde nemám, jen jsem udělal form a v něm klasicky snippet. Bohužel při pokusu o překreslení končím tou chybou. Jdu mrknout na tvé řešení.
- tomees
- Člen | 59
Tyjo.. až se stydím, ale díky tvému řešení jsem si všiml zapomenuté snippetArea okolo formuláře. To bylo pak obalené ještě jednou snippatAreou a tu jsem invalidoval..
Už to šlape jak má, prošel jsem to milionkrát a byl jsem si jistý že to mám tak jak to být má… no pro příště.
Díky moc za nakopnutí.