Je od nové verze vyžadována render() metoda u formuláře jako komponenty?

Jigs
Člen | 14
+
0
-

Ahoj, narazil jsem na tento best practise: https://doc.nette.org/…s/form-reuse

Bohužel jsem se po naimplementování dostal exception, že nemám naimplementovanou render() metodu. Vím, že obecně v komponentách render metoda být musí, ale u formuláře potřeba nikdy nebyla. Je to jen chyba tohoto článku nebo dělám já něco špatně? Případně sem můžu hodit kód.

Martin

David Matějka
Moderator | 6445
+
+2
-

v nove verzi se nic nemenilo, pokud komponentu s formularem vykreslujes primo, tak byla render metoda potreba vzdy. muze bud vypadat jen nasledovne:

public function render()
{
	$this['form']->render();
}

nebo v ni vykreslit latte sablonu, ve ktere bude {control form}

dalsi moznosti je primo v sablone presenteru vykreslovat formular, nikoliv wrapper komponentu pomoci {control articleForm-form}

Jigs
Člen | 14
+
0
-

Díky za konstruktivní odpověď. Jedná se tedy o chybu ve článku nebo se tak trochu očekává, že to čtenář prostě ví?

Druhý postup – {control form} v latte šabloně. Abych toto mohl použít, tak je potřeba stejně tu render metodu v komponentě vytvořit, abych tu šablonu mohl nastavit, nebo ne?

Každopádně děkuji za odpověď!

David Matějka
Moderator | 6445
+
+1
-

Jedná se tedy o chybu ve článku nebo se tak trochu očekává, že to čtenář prostě ví?

jj, presne tak

Abych toto mohl použít, tak je potřeba stejně tu render metodu v komponentě vytvořit, abych tu šablonu mohl nastavit, nebo ne?

jj, render metodu budes muset i tak vytvorit

Šaman
Člen | 2635
+
-1
-

Za sebe doporučuji nepoužívat obalovací komponentu okolo formuláře, pokud k tomu nemáš dobrý důvod (třeba speciální šablonu a renderování, které by nezvládal renderer).
S formulářem se pracuje lépe třeba i v action metodách, kde nastavuješ defautlní data. S komponentou to sice taky lze, ale je to zbytečná mezivrstva (pokud právě tu mezivrstvu z nějakého důvodu nepotřebuješ).


A druhý postřeh – pokud používáš obalovací komponentu, dej do názvu, že je to komponenta ArticleFormControl. Protože jinak je WTF přemýšlet, proč ten formulář ArticleForm nezná metody pro práci s formulářem (protože to není formulář).

Editoval Šaman (11. 7. 2018 13:32)