Запоминание данных при перенаправлении - PullRequest
0 голосов
/ 16 сентября 2011

У меня есть приложение в Symfony, которое генерирует много сообщений. Каждое действие в модуле может генерировать сообщения, хранящиеся в массиве. Последние добавленные сообщения должны отображаться в любом представлении (поэтому я вызываю функцию в layout.php, чтобы сообщения отображались в каждом шаблоне представления). Многие действия перенаправляют (с помощью функции redirect (); я не буду использовать forward ()) для других действий после установки сообщения.

Итак, схема следующая. - Действие A: установить сообщение, перенаправить на Действие B. - Действие B: отображение вида (и макета, конечно, также).

Когда я не использую redirect (), все работает нормально. Но когда я устанавливаю сообщение ($ my_array [] = "новое сообщение"), массив кажется "умершим" (пустым) сразу после redirect ('same_module / another_action') .

Проблема:

Как установить данные (переменные) в одном действии, которые будут «доступны» в другом действии ПОСЛЕ перенаправления (redirect ()). Я заметил, что когда я использую forward (), переменные доступны, но когда я использую redirect (), все переменные кажутся пустыми.

Я даже создал my_class и поместил их функции для обработки (добавления, отображения) сообщений в каталоге lib, полагая, что хотя бы внешний файл запомнит мои сообщения (в массиве). Но на самом деле ничего не изменилось - после перенаправления массив снова кажется пустым (count ($ messages_array) = 0 после redirect ()).

Это действительно странно для меня. Любое решение этого?

Ответы [ 2 ]

0 голосов
/ 19 сентября 2011

Как установить данные (переменную) в одном действии, которое будет «доступно» в другом действии ПОСЛЕ перенаправления (redirect ()).

Вы должны использовать сеанс пользователя Symfony:
- http://www.symfony -project.org / gentle-Введение / 1_4 / ru / 06-Внутри-контроллер-слой # chapter_06_user_session

0 голосов
/ 17 сентября 2011

Причина, по которой он работает с forward, но не с перенаправлением, заключается в том, что redirect просит браузер перейти на новый URL (сделать новый http-запрос), но forward выполняет это внутренне (в пределах symfony).

Если вам нужно отображать эти сообщения только один раз, я предлагаю использовать функцию flash класса myUser в symfony, которая очищается после следующего запроса. Установите это в действии как:

$this->getUser()->setFlash("message", "blahlahblah");

, затем в своем шаблоне вы можете вызвать $sf_user->hasFlash("message"), чтобы узнать, есть ли у пользователя вспышка определенного типа (в примере: сообщение), а затем получить ее через $sf_user->getFlash("message"). Более длинный пример:

<?php if ($sf_user->hasFlash("message")): ?>
  <div class="message">
    <?php echo $sf_user->getFlash("message) ?>
  </div>
<?php endif ?>

Для получения подробной информации о том, как работает вспышка, см. документы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...