2015年6月21日 星期日

Yii 2.0 CatchAll + 參數

2015-06-21

文件:http://www.yiiframework.com/doc-2.0/yii-web-application.html#$catchAll-detail

根據官方文件說明,提到了 CatchAll 可以把用戶來的 Request 導向固定的位置,而且可以帶入一些參數如下

   'on beforeRequest' => function () {
            Yii::$app->catchAll = [
              'site/maintenance',
              'msg' => 'Showing Message'
            ];
    },

其中 msg 就是帶入的參數,內容為字串 'Showing Message',這時候要注意幾件事情

1. 對應的 action function 的參數名稱要與指定的名稱一致。就上述例子來說參數名稱就必須要是 $msg:

    public function actionMaintenance($msg){      
        return $this->render('maintenance');
    }

如果對應的 action 所使用的參數名稱與 CatchAll 指定的不一致就會有錯誤發生,例如:

    public function actionMaintenance($message){      
        return $this->render('maintenance');
    }

你就會看到如下的錯誤

如果要傳入的參數是 array的時候,

   'on beforeRequest' => function () {
            Yii::$app->catchAll = [
              'site/maintenance',
              'msg' => [
                  'message' => 'Catch All TEST',
                  'moreMsg' => 'More Message',
                ]
            ];
    },

action 所使用的參數也必須宣告成 array

   public function actionMaintenance(array $msg){      
        return $this->render('maintenance', [
                                'message' => $msg['message']]
                            );
    }

所以使用 CatchAll 需要帶參數時有幾個重點

1. action 需要宣告使用的參數名稱
2. 參數名稱要一致
3. 不可忽略參數的型態

如何使用 CatchAll 可參考
http://yii2learningnote.blogspot.tw/2015/06/yii-20-catchall.html

沒有留言:

張貼留言