2017-06-27 1 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) 
{ 
    $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 
} 

良くなると思う:beforeAction内のデータをプリントアウトするには

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

を:

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

私はアクション名がさらに実行防止するためには 'たActionError'

+0

あなたの方法は非常に魅力的です私のYii2バージョン2.0.12では使用できません。コントローラーのアクションは表示されますが、「エラー」アクションは表示されません。 –

関連する問題