代码之家  ›  专栏  ›  技术社区  ›  Eduardo

yii2-操作前返回响应

  •  0
  • Eduardo  · 技术社区  · 7 年前

    我正在构建一个测试api。我已经创建了一个从yii\rest\controller扩展的控制器页。操作需要发送响应。

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

    我正在尝试使用beforeaction()执行此操作,但问题是返回数据用于验证操作是否应继续。

    因此,我的临时解决方案是将服务对象保存在一个类属性中,以便在操作和返回响应中对其求值。

    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方法返回响应以避免重复代码?

    2 回复  |  直到 7 年前
        1
  •  4
  •   rob006    7 年前

    您可以在中设置响应 beforeAction() 然后回来 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);
    }
    
        2
  •  -1
  •   Lukasz    7 年前

    可能在$this->service=$service;之后的beforeaction中粘贴

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