2019-08-08 10:15:56 263次浏览 2条回答 0 悬赏 10 金钱

Yii 框架中控制器中的 actions 函数有什么用?难道只是用来做验证么?

亿速云
  • 回答于 2019-08-08 11:02 举报

    我个人使用的话有两种情况:
    一是在控制器actions方法,用来写一些公用的操作。
    二是在common文件夹下新建xxxAction.php写一些公用方法,例如导入、导出、select2的下拉搜索,这样frontend、backend都可共用。

  • 回答于 2019-08-08 11:08 举报

    你可以理解成action的代码复用。

    对控制器的操作封装。
    例如:错误处理action,这个action在所有controller里都可能用到,或在别的模块里也用。

    那就单独出来一个action类,然后在控制器里需要使用的时候就在actions里配置一下,这个控制器就有了这个action功能。

    其实yii对这个ErrorAction已经做了封装。

    public function actions()
    {
        return [
            'error' => [
                'class' => 'yii\web\ErrorAction',
            ],//返回错误
            'captcha' => [
                'class' => 'yii\captcha\CaptchaAction',
                'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
            ],//返回验证
    ];
    

    这样就相当于在controller里写了下面两个控制器

    public function actionError()
    {
        //其实这个是单独封装的action,在需要的时候通过配置附加进来
        //****如果你理解行为,你也可以理解这个。
    }
    
    public function actionCaptcha()
    {
        //其实这个是单独封装的action,在需要的时候通过配置附加进来
        //****如果你理解行为,你也可以理解这个。
    }
    

    单独封装的action 必须要实现run方法.因为yii在执行action的时候会执行这句:

    是重写actions()
    $result = call_user_func_array([$this, 'run'], $args);
    

    执行行为的时候其实是执行这句:

    是重写behaviors()
    

    return call_user_func_array([$object, $name], $params);]

    底层封装处理逻辑,将具体操作向外抛出,如果需要实现这个功能,只需要上层重写这个未实现的方法,将它实现,底层就会去处理你实现的这个方法。
    例如 你实现了actions(),behaviors(),xxx,那么yii就会处理里面的操作,
    把actions()里面的定义都当作这个controller的action,
    把behaviors()里定义的类里的函数都当作这个controller的函数,

    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
PHP学院的中学生
经理

PHP学院的中学生

注册时间:2018-10-23
最后登录:52分钟前
在线时长:40小时46分
  • 粉丝9
  • 金钱705
  • 威望10
  • 积分1205

热门问题