热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

使用背景:

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

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


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

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


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


推荐阅读
author-avatar
諾言DJ_791
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有