我正在构建一个测试API。我已经创建了一个控制器页面,它从yii\rest\Controller扩展而来。操作需要发送响应。
要访问此控制器中的操作,需要发布一个service_id值。如果存在,我需要评估该service_id是否存在,它是否处于活动状态且属于登录的用户。如果验证失败,我需要发送一个响应。
我尝试使用beforeAction()来完成此操作,但问题是返回的数据用于验证操作是否应该继续。
因此,我的临时解决方案是将服务对象保存在Class属性中,以便在操作中对其进行计算并返回响应。
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方法返回响应以避免重复代码?
发布于 2018-06-25 01:31:04
您可以在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);
}
发布于 2018-06-25 01:03:28
可以在$this-> beforeAction =$service之后粘贴服务;
if (empty($this->service)) {
echo json_encode(['code' => 'ERROR', 'message' => 'Service does not exist']);
exit;
}
https://stackoverflow.com/questions/51012072
复制相似问题