在Yii框架中实现flash消息

时间:2015-05-04 08:12:08

标签: php flash yii

这是我的控制器的功能:

public function actionUser(){
        Yii::app()->user->setFlash('success', "Data1 saved!");
....
}

在视图中如果我写这个:

<?php echo Yii::app()->user->getFlash('success'); ?> 

它有效,但我想出现在内容之上的某个地方,然后在几秒后自动淡出。我是从here

尝试过的
<?php
Yii::app()->clientScript->registerScript(
   'myHideEffect',
   '$(".info").animate({opacity: 1.0}, 3000).fadeOut("slow");',
   CClientScript::POS_READY
);
?>

但我不明白谁是myHideEffect和班级.info?有人能举个例子吗?或演示的链接? 谢谢。

2 个答案:

答案 0 :(得分:2)

下面有两个flash消息实现,我们可以使用toastr通知或正常的bootstrap flash消息实现来显示消息。

如果您希望显示消息为toastr通知,请将此行代码作为控制器操作。

YII::app()->user->setFlash('toastr.error', 'An Error occured when saving');

如果您想使用正常的bootstrap flash消息,请使用。

YII::app()->user->setFlash('alert alert-danger', 'An Error occured.');

要使其工作,您必须在主视图布局上处理Flash消息,如下所示。最有可能在<?php echo $content; ?>

之前
    /** Takes care of the flashmessages **/
    $flashMessages = Yii::app()->user->getFlashes();
    if ($flashMessages) {

        foreach ($flashMessages as $key => $message) {
          $pattern = '/\s/';
            $match = preg_match($pattern, $key);/* This checks the type of error message to use if the error $key is just one word then use toastr notification */
            if ($match == 0) {
                Yii::app()->clientScript->registerScript(
                        'myNotifyEffect', $key . '("' . $message . '");', CClientScript::POS_READY
                );
            } elseif ($match > 0) {

                if ($key != 'alert alert') {
                    Yii::app()->clientScript->registerScript(
                            'myHideEffect', '$(".' . $key . '").animate({opacity: 1.0}, 5000).fadeOut("slow");', CClientScript::POS_READY
                    );
                    echo '<div class= "' . $key . ' alert-bold-border square fade in alert-dismissable">' . '<button class="close" data-dismiss="alert" type="button">×</button>' . $message . "</div>\n";
                } else {
                    echo '<div class="' . $key . ' alert-bold-border square fade in alert-dismissable">' . '<button class="close" data-dismiss="alert" type="button">×</button>' . $message . "</div>\n";
                }
            }
        }
    }

答案 1 :(得分:0)

这是一个基于jquery的问题,而不是基于yii的问题。不过试试这个:

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

...

<script>
   $(document).ready(function() {
       setTimeout(function() {
           $('#message').fadeOut('slow');
       }, 3000);
   });
</script>