從版本 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 } }