生命周期
1.创建控制器然后调用yii\base\Controller::init()
方法
2.根据操作id选择操作对象;如果id没有指定,会使用defaultID,如果有相同的内联动作和独立动作,会优先独立动作的方法,没有再抛出异常;这一步只是选择操作对象,并没有去执行
3.控制器按顺序调用应用主体、模块、 控制器的 beforeAction() 方法;如果有一个返回false,将停止后面的操作
4.填入数据,执行操作
5.控制器按顺序调用控制器、模块、应用主体的 afterAction()
6.应用主体获取操作结果并赋值给响应
动作定义
内联动作
内联动作是指的在本控制器类中定义一个动作,是很容易创建的
要求:
1.使用action
开头
2.第一个单词大写
3.将横杠去掉,并大写后一个字母
4.必须是public
属性
public function actionTesta($data = 'test data') {
return $this->render('test', ['data' => $data]);
}
独立动作
内联动作只会属于那一个控制器,如果想在其他的控制器下也使用这个操作,那么可以选择创建一个独立动作,而不是复制粘贴,虽然创建有一点繁琐,但是比较灵活
步骤:
1.创建一个继承于yii\base\Action
的类
2.被继承的类必须实现一个run
的方法
3.在你需要的控制器里重写actions
方法
public function actions() {
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
],
'ha' => [
'class' => 'app\controllers\HaAction'//除了class类名,还能写容器中的别名和is_callable能通过的数组
]
];
}
public function run() {
return 'ha~';
}
使用post数据
yii使用下面这种方法调用post数据,开始以为是可以用依赖注入然后写在了参数中,然后报错了- -!
public function run() {
return Json::encode(\Yii::$app->request->post());
}
文章评论