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

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 well 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 do we pass it from the current page to the redirect target and clean up 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 set a flash message with Yii::app()->user->setFlash('success', 'Everything went fine!'), for example, calling CWebUser::setFlash. Internally, it saves a message into a user state, so at 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

主站蜘蛛池模板: 株洲县| 湟源县| 文昌市| 靖边县| 黔东| 化隆| 毕节市| 赣州市| 鄂伦春自治旗| 长沙县| 永春县| 阿巴嘎旗| 怀仁县| 古浪县| 湄潭县| 兰考县| 马边| 湘潭市| 怀集县| 定远县| 绥江县| 海盐县| 罗平县| 双鸭山市| 宜都市| 朝阳区| 荔浦县| 卓尼县| 通渭县| 平乡县| 富裕县| 莱西市| 凤凰县| 陈巴尔虎旗| 宜宾县| 遵义市| 西畴县| 文山县| 蓝山县| 江津市| 安阳县|