Φόρμα δημιουργίας και επεξεργασίας εγγραφής
Πώς να υλοποιήσετε σωστά την προσθήκη και την επεξεργασία μιας εγγραφής στη Nette, χρησιμοποιώντας την ίδια φόρμα και για τα δύο;
Σε πολλές περιπτώσεις, οι φόρμες για την προσθήκη και την επεξεργασία μιας εγγραφής είναι ίδιες, διαφέροντας μόνο από την ετικέτα του κουμπιού. Θα παρουσιάσουμε παραδείγματα απλών παρουσιαστών όπου χρησιμοποιούμε τη φόρμα πρώτα για την προσθήκη μιας εγγραφής, στη συνέχεια για την επεξεργασία της και τέλος συνδυάζουμε τις δύο λύσεις.
Προσθήκη εγγραφής
Ένα παράδειγμα παρουσιαστή που χρησιμοποιείται για την προσθήκη
μιας εγγραφής. Θα αφήσουμε την πραγματική εργασία της βάσης δεδομένων
στην κλάση Facade
, της οποίας ο κώδικας δεν είναι σχετικός με το
παράδειγμα.
Επεξεργασία εγγραφής
Τώρα ας δούμε πώς θα έμοιαζε ένας παρουσιαστής που χρησιμοποιείται για την επεξεργασία μιας εγγραφής:
Στη μέθοδο action, η οποία καλείται ακριβώς στην αρχή του κύκλου ζωής του παρουσιαστή, επαληθεύουμε την ύπαρξη της εγγραφής και την άδεια του χρήστη να την επεξεργαστεί.
Αποθηκεύουμε την εγγραφή στην ιδιότητα $record
, ώστε να είναι
διαθέσιμη στη μέθοδο createComponentRecordForm()
για τον καθορισμό των
προεπιλογών και recordFormSucceeded()
για το αναγνωριστικό. Μια
εναλλακτική λύση θα ήταν να ορίσουμε τις προεπιλεγμένες τιμές
απευθείας στη μέθοδο actionEdit()
και η τιμή του ID, η οποία αποτελεί
μέρος της διεύθυνσης URL, ανακτάται με τη χρήση της μεθόδου
getParameter('id')
:
Ωστόσο, και αυτό θα πρέπει να είναι το πιο σημαντικό συμπέρασμα από
όλο τον κώδικα, πρέπει να βεβαιωθούμε ότι η ενέργεια είναι όντως
edit
όταν δημιουργούμε τη φόρμα. Διότι διαφορετικά η επικύρωση
στη μέθοδο actionEdit()
δεν θα γινόταν καθόλου!
Ίδια φόρμα για προσθήκη και επεξεργασία
Και τώρα θα συνδυάσουμε και τους δύο παρουσιαστές σε έναν. Είτε θα
μπορούσαμε να διακρίνουμε ποια ενέργεια εμπλέκεται στη μέθοδο
createComponentRecordForm()
και να διαμορφώσουμε τη φόρμα ανάλογα, είτε
μπορούμε να το αφήσουμε απευθείας στις μεθόδους ενέργειας και να
απαλλαγούμε από τη συνθήκη: