我正在构建一个测试API。我创建了一个从yii \ rest \ Controller扩展的Controller Page。动作需要发送响应。
要访问此控制器中的操作,需要发布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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是我可能有20个需要进行此验证的操作,有没有办法从beforeAction方法返回响应以避免重复代码?
您可以设置响应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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1234 次 |
最近记录: |