在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消息没有get
或has
方法,或者我发现的与FlashComponent和FlashHelper类相关的任何类似方法。
关于CakePHP 3中此Flash消息实现的另一个方面是您呈现并向访问者显示它们的方式;你只需在你的视图/布局中说出以下内容:
<?= $this->Flash->render(); ?>
该方法实际上会进行渲染,检查闪存是否存在,无论如何......我需要检查Flash消息是否已发送/存在,然后在布局中执行其他操作。现在对我来说似乎不可能,或者我没有朝着正确的方向前进。
我会注意到这是CakePHP 3中Flash消息的一个非常奇怪和糟糕的实现......
最后,问题是:
如何检查Flash消息是否存在,无论是在视图中还是在控制器中?
答案 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以便以后仍然可以回显)。