2017-06-27 51 views
0

如何在函數beforeAction中打印出數據?我希望做一些驗證控制器中的每個動作之前,因此,如果在beforeAction出現一些狀況,我應該打印出來的數據,並防止進一步的執行,例如,JSON:如何在Yii2的beforeAction中打印出文字

[ 
    status: "error", 
    msg: "access denied" 
] 

我嘗試甚至內部重定向到另一個控制器,但它不起作用。

public function beforeAction($action) 
{ 
    $request = Yii::$app->request; 
    if (! checkByToken($request->get('token')) && $this->getRoute() != 'web/abonent/token_error') { 
     \Yii::$app->runAction('web/abonent/token_error'); 
     return true; 
    } 

    return parent::beforeAction($action); // TODO: Change the autogenerated stub 
} 

但也許有另一個這樣做的概念。我只需要在執行任何操作之前檢查條件並打印結果或執行操作。

回答

2

,以防止進一步執行:

public function beforeAction($action) { 
    return false; // key point 
} 

內beforeAction打印出數據:

public function beforeAction($action) { 
    // set response format = json: 
    Yii::$app->response->format = Response::FORMAT_JSON; 
    // then, set the response data: 
    Yii::$app->response->data = [ 
     'status' => 'error', 
     'msg' => 'access denied' 
    ]; 
    return false; 
} 
+0

這是工作謝謝你。 –

0

我覺得會更好

public function beforeAction($action) 
{ 
    $request = Yii::$app->request; 
    if (! checkByToken($request->get('token')) && $this->getRoute() != 'web/abonent/token_error') { 
     $action = 'error'; 
    } 

    return parent::beforeAction($action); // TODO: Change the autogenerated stub 
} 

動作名必須是actionError「

+0

你的方法看起來很誘人使用但在我的Yii2版本2.0.12中不起作用。它只是打印控制器的操作,而不是「錯誤」操作。 –