Yii2 - Return beforeAction 期间的响应

Yii2 - Return Response during beforeAction

我正在构建测试 API。我创建了一个从 yii\rest\Controller 扩展的控制器页面。 Actions 需要发送响应。

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

我正在尝试使用 beforeAction() 来完成它,但问题是 return 数据用于验证操作是否应该继续。

所以我的临时解决方案是将服务对象保存在 Class 属性中,以便在操作和 return 响应中对其进行评估。

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 个操作需要此验证,有没有办法 return 来自 beforeAction 方法的响应以避免重复代码?

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

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

您可以在 beforeAction() 和 return false 中设置响应以避免调用操作:

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);
}