Як повернутися на попередню сторінку?
Що робити, якщо користувач заповнив форму, а термін дії його логіна закінчився? Щоб уникнути втрати даних, ми зберігаємо їх у сесії перед перенаправленням на сторінку входу в систему. У Nette це простіше простого.
Поточний запит може бути збережений у сесії за допомогою методу
storeRequest()
, який повертає його ідентифікатор у вигляді короткого
рядка. Метод зберігає ім'я поточного презентера, подання та його
параметри. Якщо форма також була відправлена, значення полів (за
винятком завантажених файлів) також зберігаються.
Запит відновлюється методом restoreRequest($key)
, якому ми передаємо
витягнутий ідентифікатор. Це перенаправляє до вихідного презентера та
подання. Однак, якщо збережений запит містить форму відправки, він буде
перенаправлений до початкового презентера, використовуючи метод
forward()
, передайте раніше заповнені значення у форму і дозвольте
їй перемалюватися. Це дозволяє користувачеві повторно надіслати
форму, і дані не будуть втрачені.
Важливо зазначити, що restoreRequest()
перевіряє, що користувач, який
знову увійшов, є тим самим, який спочатку заповнив форму. Якщо ні, він
відкидає запит і нічого не робить.
Давайте продемонструємо все на прикладі. Нехай у нас є презентер
AdminPresenter
, в якому редагуються дані і метод якого startup()
перевіряє, чи увійшов користувач у систему. Якщо це не так, ми
перенаправляємо його на SignPresenter
. Водночас, ми зберігаємо
поточний запит і відправляємо його ключ у SignPresenter
.
Презентер SignPresenter
міститиме постійний параметр $backlink
, в
який записується ключ, на додаток до форми входу в систему. Оскільки
параметр є постійним, він буде перенесений навіть після надсилання
форми входу.
Ми передаємо ключ збереженого запиту методу restoreRequest()
, і він
перенаправляє (або переадресує) до вихідного презентера.
Однак, якщо ключ недійсний (наприклад, більше не існує в сесії), метод
нічого не робить. Тому наступним викликом буде $this->redirect('Admin:')
,
який перенаправляє на AdminPresenter
.