我做的是在執行任何方法之前,驗證用戶登陸狀態!
其實就是在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; }
}