有人知道如何在ajax请求后在YII框架中显示flash消息? 我正在使用标准的Gii生成的CRUD操作。当我在CGridView中创建或更新数据时,我看到了我的Flash消息。但是当删除数据时,现在有闪存,但Yii :: app() - > user-> setFlash('success','我的消息')会在会话中放入消息。
我的actionDelete内容是
$result = $this->loadModel($id)->delete();
if ($result)
Yii::app()->user->setFlash('success', 'Data was deleted');
else
Yii::app()->user->setFlash('error', 'Error was occurred');
if (Yii::app()->request->getIsAjaxRequest())
{
echo Yii::app()->user->getFlash('success');
} else {
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array(index));
}
答案 0 :(得分:2)
因此,您在通过ajax检索Flash消息时遇到问题?您的控制器看起来很好,getIsAjaxRequest
方法将被解雇,但问题是在DOM中显示Flash消息。
首先创建一个包含flash消息的div:
<div id="myflashwrapper" style=""display: none;"></div>
然后,在您调用ajax方法的脚本中,您需要添加以下内容:
$('#myflashwrapper').html(message).fadeIn().delay(3000).fadeOut();
这只是将ID为“ myflashwrapper ”的元素的HTML内容更改为返回的Flash消息。如您所见,此函数期望填充名为“ message ”的变量。我们希望您的删除函数echo Yii::app()->user->getFlash('success');
中的getIsAjaxRequest
作为此值返回。
这意味着您需要修改从默认的Yii CRUD视图中单击删除链接时所执行的javascript。
如果你使用CGridView,你可以使用scriptMap
Yii::app()->getClientScript()->scriptMap = array(
'jquery.yiigridview.js' => Yii::app()->baseUrl . '/js/custom.gridview.js',
...
);
将使用您在此处引用的脚本文件,而不是gridview的默认Yii脚本。显然你只想更改那里的一个函数,所以你可以在这里得到原始的js文件:framework/zii/widgets/assets/gridview/jquery.yiigridview.js
只需复制该文件中的所有内容,将其粘贴到 custom.gridview.js 文件中,修改在删除时调用的ajax函数即可使用
答案 1 :(得分:0)
您需要获取Flash消息。尝试将此代码放在protected / layouts / main.php
中<?php foreach(Yii::app()->user->getFlashes() as $key => $message) : ?>
<div class="flash-<?php echo $key; ?>"><?php echo $message; ?></div>
<?php endforeach; ?>