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

沒有留言:
張貼留言