首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Yii2 - beforeAction期间的返回响应

Yii2 - beforeAction期间的返回响应
EN

Stack Overflow用户
提问于 2018-06-25 00:57:02
回答 2查看 2.8K关注 0票数 3

我正在构建一个测试API。我已经创建了一个控制器页面,它从yii\rest\Controller扩展而来。操作需要发送响应。

要访问此控制器中的操作,需要发布一个service_id值。如果存在,我需要评估该service_id是否存在,它是否处于活动状态且属于登录的用户。如果验证失败,我需要发送一个响应。

我尝试使用beforeAction()来完成此操作,但问题是返回的数据用于验证操作是否应该继续。

因此,我的临时解决方案是将服务对象保存在Class属性中,以便在操作中对其进行计算并返回响应。

代码语言:javascript
复制
class PageController extends Controller
{

    public $service;

    public function beforeAction($action)
    {
        parent::beforeAction($action);

        if (Yii::$app->request->isPost) {

            $data = Yii::$app->request->post();
            $userAccess = new UserAccess();
            $userAccess->load($data);

            $service = $userAccess->getService();
            $this->service = $service;
        }

        return true;
    }

    public function actionConnect()
    {

        $response = null;

        if (empty($this->service)) {
            $response['code'] = 'ERROR';
            $response['message'] = 'Service does not exist';

            return $response;
        }
    }
}

但是我可能有20个动作需要这个验证,有没有一种方法可以从beforeAction方法返回响应以避免重复代码?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-25 01:31:04

您可以在beforeAction()中设置响应,并返回false以避免动作调用:

代码语言:javascript
复制
public function beforeAction($action) {
    if (Yii::$app->request->isPost) {
        $userAccess = new UserAccess();
        $userAccess->load(Yii::$app->request->post());
        $this->service = $userAccess->getService();

        if (empty($this->service)) {
            $this->asJson([
                'code' => 'ERROR',
                'message' => 'Service does not exist',
            ]);

            return false;
        }
    }

    return parent::beforeAction($action);
}
票数 9
EN

Stack Overflow用户

发布于 2018-06-25 01:03:28

可以在$this-> beforeAction =$service之后粘贴服务;

代码语言:javascript
复制
if (empty($this->service)) {
    echo json_encode(['code' => 'ERROR', 'message' => 'Service does not exist']);
    exit;
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51012072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档