官术网_书友最值得收藏!

Using flash messages

When you are editing a model with a form, when you are deleting a model, or doing any other operation, it is good to tell users if it went fine or if there was an error. Typically, after some kind of action, such as editing a form, a redirect will happen and we need to display a message on the page we want to go to. However, how to pass it from the current page to the redirect target and clean afterwards? Flash messages will help us.

Getting ready

Set up a new application using yiic webapp.

How to do it...

  1. Let's create a protected/controllers/WebsiteController.php controller as follows:
    class WebsiteController extends CController
    {
       function actionOk()
       {
          Yii::app()->user->setFlash('success', 'Everything went fine!');
          $this->redirect('index');
       }
    
       function actionBad()
       {
          Yii::app()->user->setFlash('error', 'Everything went wrong!');
          $this->redirect('index');
       }
    
       function actionIndex()
       {
          $this->render('index');
       }
    }
  2. Additionally, create the protected/views/website/index.php view as follows:
    <?php if(Yii::app()->user->hasFlash('success')):?>
    <div class="flash-notice">
       <?php echo Yii::app()->user->getFlash('success')?>
    </div>
    <?php endif?>
    <?php if(Yii::app()->user->hasFlash('error')):?>
    <div class="flash-error">
       <?php echo Yii::app()->user->getFlash('error')?>
    </div>
    <?php endif?>
  3. Now, if we go to http://example.com/website/ok, we'll be redirected to http://example.com/website/index and a success message will be displayed. Moreover, if we go to http://example.com/website/bad, we will be redirected to the same page, but with an error message. Refreshing the index page will hide the message.

How it works...

We are setting a flash message with Yii::app()->user->setFlash('success', 'Everything went fine!'), for example, calling CWebUser::setFlash. Internally, it is saving a message into a user state, so in the lowest level, our message is being kept in $_SESSION until Yii::app()->user->getFlash('success') is called and the $_SESSION key is deleted.

There's more…

The following URL contains an API reference of CWebUser and will help you to understand flash messages better:

http://www.yiiframework.com/doc/api/CWebUser

主站蜘蛛池模板: 黄平县| 屏东市| 平阴县| 梧州市| 三穗县| 莱州市| 嵊泗县| 淮北市| 双城市| 朔州市| 榆林市| 天长市| 冕宁县| 宜都市| 乌拉特中旗| 龙岩市| 唐海县| 台江县| 漳州市| 合阳县| 霍山县| 永德县| 乾安县| 美姑县| 田阳县| 凤山市| 阿拉善左旗| 托克逊县| 沂水县| 洛隆县| 阿荣旗| 松江区| 宜兴市| 西平县| 临沭县| 宝应县| 沙洋县| 大足县| 南川市| 姚安县| 剑阁县|