Форма для створення та редагування запису
Як правильно реалізувати додавання і редагування запису в Nette, використовуючи для цього одну і ту ж форму?
У багатьох випадках форми для додавання і редагування запису однакові, розрізняючись тільки міткою на кнопці. Ми покажемо приклади простих презентерів, де ми використовуємо форму спочатку для додавання запису, потім для його редагування, і, нарешті, об'єднуємо ці два рішення.
Додавання запису
Приклад презентера, використовуваного для додавання запису. Ми
залишимо роботу з базою даних класу Facade
, код якого не має
відношення до цього прикладу.
Редагування запису
Тепер давайте подивимося, який вигляд матиме презентер, що використовується для редагування записів:
У методі action, який викликається на самому початку життєвого циклу презентера, ми перевіряємо існування запису і дозвіл користувача на його редагування.
Ми зберігаємо запис у властивості $record
, щоб він був доступний у
методі createComponentRecordForm()
для встановлення значень за
замовчуванням і recordFormSucceeded()
для ідентифікатора. Альтернативним
рішенням може бути встановлення значень за замовчуванням
безпосередньо в actionEdit()
і значення ID, який є частиною URL і
витягується за допомогою getParameter('id')
:
Однак, і це має бути найважливішим висновком з усього коду, нам
потрібно переконатися, що дія дійсно edit
, коли ми створюємо
форму. Тому що інакше валідація в методі actionEdit()
взагалі не
відбудеться!
Одна й та сама форма для додавання та редагування
А зараз ми об'єднаємо обидва презентера в один. Або ми можемо
відрізнити, яку дію задіяно в методі createComponentRecordForm()
і
налаштувати форму відповідним чином, або ми можемо залишити це
безпосередньо action-методам і позбутися умови: