Как проверить, существует ли Flash-сообщение в CakePHP 3? - PullRequest
0 голосов
/ 26 апреля 2018

В Yii (обе версии) для флеш-сообщений у нас есть методы, такие как: hasFlash для проверки наличия флеш-сообщения заранее и getFlash для получения содержимого определенного флеш-сообщения ...

В Yii 1x я бы сказал что-то вроде этого (в контроллере или в представлении):

Вид:

<?php if(Yii::app()->user->hasFlash('success')): ?>
    <div class="alert alert-success">
        <?=Yii::app()->user->getFlash('success'); ?>
    </div>
<?php endif; ?>

Контроллер:

if($something->happend()) {
    Yii::app()->user->setFlash('success', 'You\'ve done something wonderful.');
    return $this->redirect('/elsewhere');
}

В CakePHP 3 это кажется невозможным, поскольку единственное, что я могу сделать, это установить Flash-сообщение:

$this->Flash->set('Welcome, to the real world.', [
    'element' => 'success',
]);

Нет никаких методов get или has для сообщений Flash или чего-либо подобного, что я мог бы найти, связанного с FlashComponent и FlashHelper классами.

Еще одна особенность этой реализации Flash-сообщений в CakePHP 3 - это способ рендеринга и показа их посетителю; Вы просто говорите следующее в ваших представлениях / макете:

<?= $this->Flash->render(); ?>

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

Я бы отметил, что это очень странная и плохая реализация Flash-сообщений в CakePHP 3 ...

Наконец, вопрос:

Как проверить, существует ли сообщение Flash, в виде или в контроллере?

Ответы [ 4 ]

0 голосов
/ 26 декабря 2018

Один уродливый и быстрый способ сделать это:

<?php $flashRender = $this->Flash->render(); ?>
<?php if(!empty($flashRender)) : ?>
      <?= $flashRender ?>
<?php endif; ?>

Рендеринг вспышки только когда она установлена ​​

0 голосов
/ 26 апреля 2018

Вы можете использовать key при настройке вспышки. см. ниже

$this->Flash->set('Welcome, to the real world.', ['key' => 'alert']);

проверка по key в рендере перед вызовом

<?php 
if($this->Flash->render('alert')){
    echo $this->Flash->render('alert');
}
?>
0 голосов
/ 26 апреля 2018

$ this-> session-> проверка ( 'Message.location_key');

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

0 голосов
/ 26 апреля 2018

В документации по Настройка флеш-сообщений говорится, что сообщения сохраняются в сеансе. Более конкретно это говорит:

Методы FlashComponent __call () и set () могут дополнительно принимать второй параметр, массив параметров:

  • По умолчанию «мигает». Ключ массива находится под ключом Flash в сеансе.

Таким образом, чтобы проверить, существует ли флэш-сообщение, вы должны сделать:

$session->check('Flash.flash')

Или, если вы указали клавишу при установке флеш-сообщения, вы должны сделать:

$session->check('Flash.INSERT_CUSTOM_KEY')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...