Вам просто нужно реализовать run()
в классе CAction.
У вас автоматически будет доступ к параметрам $ _GET, конечно, как обычно в вашем действии:
class ListAction extends CAction {
public function run() {
$id = $_GET['id']; // $_POST works too
$model = Model::model()->findbyPk($id);
// render your view next, whatever
}
}
Если вы хотите передать дополнительные константы CAction от контроллера, вы можете сделать это следующим образом:
В настройках вашего действия в вашем контроллере:
public function actions() {
return array(
'userSearch'=>array(
'class'=>'application.controllers.User.ListAction', // path alias to your action
'model'=>'User',
'otherVariable'=>'something here',
));
}
Затем вВАША ПРЕДУПРЕЖДЕНИЕ:
class ListAction extends CAction {
public $modelName;
public $otherVariable;
public function run() {
$this->modelName; // 'User' - passed in from the calling Controller
$this->otherVariable; // 'something here' - passed in from the calling Controller
}
}
Я не уверен, какие другие параметры вы могли бы передать в свое действие, но это должно охватывать это.Я надеюсь, что это поможет!
Обновление:
Этот вопрос заставил меня взглянуть на код более подробно, и это на самом деле все, что связано с функцией Yii, о которой я не знал,Если вы объявите параметр для своего действия (например, function actionTest($param)
), то Yii проанализирует параметры $ _GET запроса и вызовет Action с этим параметром, переданным функции.Так что вам не нужно получать параметр $ _GET самостоятельно.Вот так:
http://example.com/mycontroller/myaction?param1=test
function actionMyaction($param1) { // in a CAction, it would be run($param1)
echo '$_GET parameter param1 set to '.$param1; // will echo "test"
}
Это реализовано следующим образом:
- В
runAction()
CController получает параметры $ _GET (если они есть) с getActionParams()
runAction()
передает эти параметры в runWithParams()
runWithParams()
использует PHP Reflection, чтобы увидеть, есть ли у метода действия параметры (например, $param1
) - Если есть параметрыон вызывает
runWithParamsInternal()
с параметрами $ _GET runWithParamsInternal()
вызывает метод run()
с параметрами $ _GET (например, run($param1)
)
- В противном случаеон просто вызывает
run()
без каких-либо параметров
Использовать это совершенно необязательно, вы все равно можете получить доступ к параметрам $ _GET, как обычно, в своем действии без.По сути, это просто обеспечивает обязательные параметры $ _GET.Если вашему действию нужен параметр, но в URL-адресе запроса нет параметров $ _GET, Yii возвращает «Ошибка 400» из invalidActionParams()
.Это избавляет вас от необходимости проверять isset($_GET)
в ваших действиях, что довольно круто.