[yii2] 实现所有action方法之前执行一段代码或者方法

我做的是在执行任何方法之前,验证用户登陆状态!

其实就是在controller中写beforeaction()方法,

然后我的方案就是做一个基类,然后让你所有控制器继承你的基类,

如果控制器的基类用__constuct()方法做一些初始化的工作(比如初始化模板引擎),如果你在控制器里实现了__construct,你还需要在__construct里调用parent::__construct()就太麻烦了。

然后在此基类中写入方法beforeAction()或者init(),

在YII2里这两个方法自动就执行啦!

别忘了最后return true;

class BaseController extends Controller{

  // 白名单
    public       $allowAllAction = [
            // 登陆控制器的白名单
            'seller/login/login',
    ];

  /*
* * 登录统一验证 (每次动作先执行本方法) */ public function beforeAction( $action ) { // 检验登陆状态合法性 $is_login = $this->checkSellerLoginStatus(); if( in_array( $action->getUniqueId(), $this->allowAllAction ) ) { return true; } if( empty($_COOKIE['name']) ) {
  // 非法跳转
$this->redirect( UrlService::buildSellerUrl( '/login/login' ) ); return false; } return true; }
}

  

原文地址:https://www.cnblogs.com/lipcblog/p/7217654.html