Yii2.0 Controller

生命周期

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());
    }
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据