Model binding pro Nette formuláře
- Honza Marek
- Člen | 1664
Poslední dobou jsem ve škole dělal něco v ASP.net MVC 2 a taky si četl dokumentaci Symfony2. A zalíbila se mi věc, která se jmenuje model binding. Znamená to, že data z formuláře se rovnou sypou do nějaké entity. Potom pracuji již s naplněnou entitou.
Sám pro sebe jsem si něco takového implementoval, ale není to dostatečně obecné, aby se to dalo zveřejnit.
Malý příklad:
Formulářový model. V jednoduchých případech např. Doctrine entita, ve složitějších vlastní třída.
Továrnička formuláře:
- jtousek
- Člen | 951
Ta služba Validator je třída ze Symfony?
A jinak ano, líbí se mi to. V případě entit Doctrine 2 provázání formuláře přímo s entitou bije do očí a také mám v úmyslu to implementovat. Jen jsem si říkal že počkám na nové Nette formuláře než se do toho pustím.
//EDIT: Ale dát to obecně do frameworku, s tím už bych trochu váhal – ne každý používá Doctrine. Měl jsem spíše v úmyslu udělat to mimo. Pokud to bude přímo ve frameworku, nevadí mi to. (s rozumným API)
Editoval jtousek (26. 11. 2010 15:04)
- romansklenar
- Člen | 655
Takovýto postup jde použít jen u entit, které nemájí žádné asociace. S těmi přicházejí už další komplikace a chtělo by na to myslet, pokud se bude nějaký takový doplněk tvořit.
- Honza Marek
- Člen | 1664
jtousek
Ta služba Validator je třída ze Symfony?
Mohla by být.
jtousek
Ale dát to obecně do frameworku, s tím už bych trochu váhal – ne každý používá Doctrine.
mkoubik
u menších projektů je nejjednodušší prostě vzít pole z $form->values
Může to existovat s klasickým způsobem s getValues vedle sebe. Pokud budu chtít mít výstupem formuláře nějakou chytrou třídu místo pole, použiju binding.
romansklenar
Takovýto postup jde použít jen u entit, které nemájí žádné asociace.
Jsou dva způsoby jak to řešit.
- Vlastní formulářový prvek (CategorySelectBox, …).
- Někde něčemu zaregistrovat, že pro typ BaseEntity má provést
$value->getId()
a podobně.
- srigi
- Nette Blogger | 558
No parada, v Ostrave na PS som toto prezentoval, ze framework Yii to ma uz od zaciatku. Dostalo sa mi chladnej odozvy, ze je to moc previazane a pod. Teraz sa to ako bumerang vracia, plno ludi stale hlada riesenie – Entita, Formular, jednotna validacia. Pridam len malu ukazku toho riesenia v Yii.
Model (AR classa)
Controller (spracovanie formu)
Sablona
Vsetko je to krasne previazane (Formular, DB Row), ma to jednotne validacne pravidla a co sa mimoriadne paci (a v Nette netrpezlivo ocakavam) je moznost definovat typ formularoveho policka az v sablone, nezavisle na type Entitnej property.
Editoval srigi (26. 11. 2010 21:13)
- Filip Procházka
- Moderator | 4668
srigi: vypadá to že to funguje, byť to definování vypadá vskutku hrozně :)
Editoval HosipLan (27. 11. 2010 10:18)