CakePHP: Как я могу прочитать в контроллере строковое значение флэш-сообщения, если оно установлено?

Мне нужно знать это, чтобы я мог добавлять сообщения (вспышки), если это необходимо.

Таким образом, я могу дать пользователю полную обратную связь и избежать перезаписи одной флэш-памяти (например, при перенаправлении, где обычно это может сделать последний контроллер).

Я прочитал документацию и не нашел в setFlash() какой-либо опции, которая требовала бы этого добавления.

Я знаю, что есть Session::read(), но я не знаю, какой ключ искать.

Спасибо!


person Michael    schedule 12.09.2012    source источник
comment
debug($_SESSION) и вы узнаете ключ.   -  person ADmad    schedule 13.09.2012
comment
Или просто посмотрите на src api.cakephp.org/view_source/session-component# строка-126   -  person tigrang    schedule 13.09.2012


Ответы (2)


То, что вы ищете, это:

$this->Session->read('Message');

Сообщение — это ключ, который содержит сообщения сеанса для текущего пользователя, будь то флэш-сообщения или сообщения авторизации. Простой pr($this->Session->read()) даст вам результат, похожий на:

Array(
    ['Auth'] => array(
        ... your auth keys and values here
    ),
    ['Message'] => array(
        ['flash'] => ... your current flash message array (if any)
        ['auth'] => ... your current auth message array (if any)
    )
)

Хотя я не уверен, почему вы беспокоитесь. Когда вы делаете

$this->Session->setFlash('your message');
$this->redirect('/');

Даже если у вас есть перенаправление, сообщение сеанса будет сохраняться и отображаться на перенаправленной странице. Вам просто нужно убедиться, что вы выводите флэш-сообщения.

person skaa    schedule 13.09.2012
comment
skaa, я описал причину беспокойства. Состоит в ситуации, когда я ставлю флеш перед редиректом, а в том контроллере (на который я редирект) перезаписывает флеш. В какой-то момент я собираюсь добавить последний к предыдущему, чтобы пользователь не пропустил первый. - person Michael; 15.09.2012
comment
Что ж, вместо того, чтобы изменять исходный массив флэш-памяти напрямую и каждый раз внутри контроллера, вы можете использовать другую функцию: $this->_appendToFlash(); // in app_controller, и вы можете изменить исходный ключ Message.flash.message внутри этой функции и по-прежнему иметь возможность переписывать флэш-сообщение, используя $this->Session->setFlash();, когда это необходимо. . - person skaa; 15.09.2012

Флэш-сообщение можно получить, используя это:

$message = $this->Session->read('Message.flash.message');
echo $message;
person Krishna    schedule 13.09.2012