Yii2 - обратный ответ во время beforeAction - PullRequest
0 голосов
/ 24 июня 2018

Я создаю тестовый 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, чтобы избежать повторения кода?

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Вы можете настроить ответ в 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);
}
0 голосов
/ 24 июня 2018

может быть вставлено в beforeAction после $ this-> service = $ service;

if (empty($this->service)) {
    echo json_encode(['code' => 'ERROR', 'message' => 'Service does not exist']);
    exit;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...