YII2 自定义控制器验证 behaviors()

YII2 自带验证函数,在每个控制器的behaviors()方法中。可是实现自由验证和跳转。(默认的一些验证,跳转很麻烦,暂时没有找到跳转到自定义路径的方法。就是验证失败后跳转路径。如果有知道的朋友,可以留意告诉我下,先谢谢啦!)

使用背景:

        YII2自带有RABC权限验证插件的,百度一下,使用教程很多。但是感觉太麻烦了,本人项目不需要那么复杂的,主要是还有建表,写的代码太多了,比较懒(这个是主要原因)。

         于是自己下一个简单的用户权限验证方法,正对权限比较单一的。如果太复杂的权限建议还是去看看RABC验证吧。


废话不多说,直接上代码:

        首先创建一个自定义的验证类


<?php

namespace frontend\filter;
use Yii;
use yii\base\ActionFilter;
use yii\web\Controller as ctrl;


class UserFilter extends ActionFilter
{
    public function beforeAction($action)
    {
        if(parent::beforeAction($action)) // TODO: Change the autogenerated stub 写死了,返回true
        {
            $user = Yii::$app->user->identity;
            if($user->state == 0){
                //return ctrl::redirect(['site/msg','msg' => '账户异常,请联系我们。']);
                ctrl::redirect(['site/msg','msg' => '账户异常,请联系我们。']);
                return false;
            }
           
            return true;
        }

        return false;
    }
}

return部分为修改,经过使用,发现一个问题,不能直接return跳转,必须返回false,不然会出现view加载后再跳转,尴尬

很尴尬,都验证不通过了,后面还是继续运行,肯定是报错的,比如查询某个语句,都出现验证失败了,查询一个空后面直接使用就会报错的。这个是重点。。。。


这个是一个简单的用户资料完善的验证,如果用户没有填写手机号,就跳转到对应页面让用户添加自己手机号。必须绑定手机

然后在  behaviors()中使用


找一个需要验证的控制器中的behaviors()函数,进行修改:

 public function behaviors()
    {
        return [
            'access' => [    //   这个就是自带的验证登录的,懒得改,直接用的
                'class' => AccessControl::className(),   
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
            'userfilter' => [   //这个地方名字貌似可以随便写
                'class' => 'frontend\filter\UserFilter', //对应的类
            ],
        ];

    }

这样就OK了,是不是超级简单,这个是我写的一个简单的实现方法,下面这个自定义的验证,一样可以写

 // 'only' => ['只使用的action'],
 // 'except' => ['除了这些action外都使用'],


好啦,大概就这些,接下来有复杂点的,可以基于这个慢慢研究,可以很灵活的。


转载请标明出处:https://blog.csdn.net/u012533474/article/details/80046900


版权声明:本文为u012533474原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。