我做的是在执行任何方法之前,验证用户登陆状态!
其实就是在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; }
}