Formulář pro vytvoření i editaci záznamu
Jak správně v Nette implementovat přidání a editaci záznamu, s tím, že pro obojí využijeme tentýž formulář?
V mnoha případech bývají formuláře pro přidání i editaci záznamu stejné, liší se třeba jen popiskou na tlačítku. Ukážeme příklady jednoduchých presenterů, kde formulář použijeme nejprve pro přidání záznamu, poté pro editaci a nakonec obě řešení spojíme.
Přidání záznamu
Příklad presenteru sloužícího k přidání záznamu. Samotnou práci s databází necháme na třídě
Facade
, jejíž kód není pro ukázku podstatný.
Editace záznamu
Nyní si ukážeme, jak by vypadal presenter sloužící k editaci záznamu:
V metodě action, která se spouští hned na začátku životního cyklu presenteru, ověříme existenci záznamu a oprávnění uživatele jej editovat.
Záznam si uložíme do property $record
, abychom jej měli k dispozici v metodě
createComponentRecordForm()
kvůli nastavení výchozích hodnot, a recordFormSucceeded()
kvůli ID.
Alternativním řešením by bylo nastavit výchozí hodnoty přímo v actionEdit()
a hodnotu ID, která je
součástí URL, získat pomocí getParameter('id')
:
Nicméně, a to by mělo být nejdůležitejším poznatkem celého kódu, musíme se při tvorbě formuláře ujistit,
že akce je skutečně edit
. Protože jinak by ověření v metodě actionEdit()
vůbec
neproběhlo!
Stejný formulář pro přidání i editaci
A nyní oba presentery spojíme do jednoho. Buď bychom mohli v metodě createComponentRecordForm()
rozlišit,
o kterou akci jde a podle toho formulář nakonfigurovat, nebo to můžeme nechat přímo na action-metodách a zbavit se
podmínky: