如何检查CakePHP 3中是否存在Flash消息?

时间:2018-04-26 12:22:44

标签: php cakephp

在Yii(两个版本)的Flash消息中,我们有类似的方法:hasFlash用于检查事先是否存在flash消息,getFlash来获取特定flash消息的内容......

在Yii 1x中我会说这样的事情(无论是在Controller中还是在视图中):

查看:

<?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',
]);

Flash消息没有gethas方法,或者我发现的与FlashComponentFlashHelper类相关的任何类似方法。

关于CakePHP 3中此Flash消息实现的另一个方面是您呈现并向访问者显示它们的方式;你只需在你的视图/布局中说出以下内容:

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

该方法实际上会进行渲染,检查闪存是否存在,无论如何......我需要检查Flash消息是否已发送/存在,然后在布局中执行其他操作。现在对我来说似乎不可能,或者我没有朝着正确的方向前进。

我会注意到这是CakePHP 3中Flash消息的一个非常奇怪和糟糕的实现......

最后,问题是:

如何检查Flash消息是否存在,无论是在视图中还是在控制器中?

4 个答案:

答案 0 :(得分:2)

Setting Flash Messages上的文档说明消息存储在会话中。更具体地说:

  

FlashComponent的__call()和set()方法可选择使用第二个参数,一个选项数组:

     
      
  • key默认为'flash'。在会话中的Flash键下找到的数组键。
  •   

因此,要检查是否存在Flash消息:

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

或者,如果您在设置Flash消息时指定了一个键,则可以执行以下操作:

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

答案 1 :(得分:2)

您可以在设置Flash时使用ZnZincServerAdaptor startOn: 8080. ZnZincServerAdaptor default server debugMode: true. ZnServer default logToStandardOutput. "Here you register the Seaside application _class_" (WAAdmin register: MyFirstWebApp asApplicationAt: 'image') preferenceAt: #serverPath put: '/'. WAAdmin defaultDispatcher defaultName: 'image'. 。见下文

key

在调用前通过$this->Flash->set('Welcome, to the real world.', ['key' => 'alert']); 进行检查

key

答案 2 :(得分:0)

一种丑陋而快速的方法是:

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

仅在设置闪光灯后才渲染

答案 3 :(得分:-1)

$这 - &GT;会话而&GT;检查( 'Message.location_key');

根据是否设置了此类Flash消息,返回true / false。 - &gt; read()执行相同的操作,但是如果存在则返回flash数据(任何且至关重要的是,它会离开会话var以便以后仍然可以回显)。