Formular pentru crearea și modificarea unei înregistrări
Cum se implementează în mod corespunzător adăugarea și editarea unei înregistrări în Nette, utilizând același formular pentru ambele?
În multe cazuri, formularele de adăugare și de editare a unei înregistrări sunt identice, diferind doar prin eticheta de pe buton. Vom prezenta exemple de prezentări simple în care folosim formularul mai întâi pentru a adăuga o înregistrare, apoi pentru a o edita și, în final, vom combina cele două soluții.
Adăugarea unei înregistrări
Un exemplu de prezentator utilizat pentru a adăuga o înregistrare. Vom lăsa activitatea efectivă a bazei de date pe seama
clasei Facade
, al cărei cod nu este relevant pentru acest exemplu.
Editarea unei înregistrări
Acum să vedem cum ar arăta un prezentator utilizat pentru a edita o înregistrare:
În metoda action, care este invocată chiar la începutul ciclului de viață al prezentatorului, se verifică existența înregistrării și permisiunea utilizatorului de a o edita.
Stocăm înregistrarea în proprietatea $record
, astfel încât să fie disponibilă în metoda
createComponentRecordForm()
pentru setarea valorilor implicite și recordFormSucceeded()
pentru ID.
O soluție alternativă ar fi să setați valorile implicite direct în actionEdit()
, iar valoarea ID, care face
parte din URL, este recuperată cu ajutorul getParameter('id')
:
Cu toate acestea, și aceasta ar trebui să fie cea mai importantă concluzie din tot acest cod, trebuie să ne
asigurăm că acțiunea este într-adevăr edit
atunci când creăm formularul. Pentru că, altfel, validarea din
metoda actionEdit()
nu ar avea loc deloc!
Același formular pentru adăugare și editare
Și acum vom combina ambii prezentatori într-unul singur. Fie putem distinge ce acțiune este implicată în metoda
createComponentRecordForm()
și configura formularul în consecință, fie putem lăsa direct pe seama metodelor de
acțiune și să scăpăm de condiție: