從版本 1.1.4 開始,Yii 提供了對自動動作參數綁定的支持。就是說,控制器動作可以定義命名的參數,參數的值將由 Yii 自動從 $_GET 填充。
為了詳細說明此功能,假設我們需要為 PostController 寫一個 create 動作。此動作需要通過$_GET傳遞兩個參數:
category:一個整數,代表帖子(post)要發表在的那個分類的ID。
language:一個字符串,代表帖子所使用的語言代碼。
從 $_GET 中提取參數時,我們可以不再像下面這樣寫相關的驗證代碼了:
class PostController extends CController{
public function actionCreate(){
if(isset($_GET['category']))
$category=(int)$_GET['category'];
else
throw new CHttpException(404,'invalid request');
if(isset($_GET['language']))
$language=$_GET['language'];
else
$language='en';
// ......
}
}
現在使用動作參數功能,我們可以更輕松的完成如上面代碼的相關任務:
class PostController extends CController{
public function actionCreate($category, $language='en'){
$category = (int)$category;
echo 'Category:'.$category.'/Language:'.$language;
// ......
}
}
注意我們在動作方法 actionCreate 中添加了兩個參數。這些參數的名字必須和我們想要從 $_GET 中提取的名字一致。當用戶沒有在請求中指定 $language 參數時,這個參數會使用默認值 en 。由於 $category 沒有默認值,如果用戶沒有在 $_GET 中提供 category 參數,將會自動拋出一個 CHttpException (錯誤代碼 400) 異常。
從版本1.1.5開始,Yii已經支持數組的動作參數。使用方法如下:
class PostController extends CController{
public function actionCreate(array $categories){
// Yii will make sure $categories be an array
}
}