如何在Yii2中打印beforeAction中的文本

时间:2017-06-27 13:09:56

标签: php yii2

如何在函数beforeAction中打印出数据?我想在控制器中的每个操作之前进行一些验证,因此如果在beforeAction中发生某些情况,我应该打印出数据并阻止进一步执行,例如,JSON:

[
   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 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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'