2016-12-11 82 views
0

的loggedIn我有我想檢查,如果用戶是在yii2做客但是代碼失敗,即使用戶是來賓這個控制器動作是什麼,我都試過Yii2檢查,如果用戶在yii2

class CustomerController extends Controller 
{ 

    public function beforeAction($action) 
    { 
    if(Yii::$app->user->isGuest){ 
     return $this->redirect(Yii::$app->urlManager->createUrl("site/login")); 
    } 


    public function actionDashboard(){ 
    //do dashboard stuff 
    } 

    } 

我一直在使用AccessControl的過濾器也嘗試過,但他們仍然無法 這是一個前端控制器

public function behaviors() 
{ 
    return [ 
     'access' => [ 
      'class' => AccessControl::className(), 
      'rules' => [ 
       [ 
        'controllers' => ['customer'], 
        'actions' => ['dashboard'], 
        'allow' => true, 
        'users' => ['?'], 
       ], 

      ], // rules 

     ], // access 


    ]; // return 

} // behaviors 

然後我的客戶控制器我只是延長前端Controlller但即使這種方法失敗的訪問控制過濾器實例

BY這樣做,這樣

public function actionDashboard(){ 
    if(Yii::$app->user->isGuest){ 
     return $this->redirect(Yii::$app->urlManager->createUrl("site/login")); 
    }else{ 

     //perform dashboard stuff 

    } 

} 

這工作,但問題是,按照過去的方法有很多,其中犯規的其他動作重複的代碼似乎是正確,即使它的工作原理

有什麼不對這似乎後者的方法更好

我已經檢查了This linkThis second one和implementend他們,但沒有工作

什麼可能是錯誤的。

AM using Yii2 improved advanced template 

回答

1

你讀過guide了嗎?詳細解釋如下...

在控制器中添加此方法,該方法應該對來賓隱藏。

public function behaviors() 
{ 
    return [ 
     'access' => [ 
      'class' => \yii\filters\AccessControl::className(), 
      'rules' => [ 
       [ 
        'allow' => true, 
        'roles' => ['@'], 
       ], 
      ], 
     ], 
    ]; 
} 

就是這樣。

具有此行爲的控制器中的每個操作都只能由簽名用戶訪問。客人自動重定向到登錄頁面(默認site/login)。