作者:諾言DJ_791 | 来源:互联网 | 2023-07-02 17:40
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