Как проверить один раз для всего пакета, если $ request-> isXmlHttpRequest? - PullRequest
0 голосов
/ 03 сентября 2018

Для проекта я использую FOSrestbundle для каждого пакета, и у меня есть ApiBundle, где каждый маршрут вызывается ajax. На каждом действии я делаю эту проверку:

if $request->isXmlHttpRequest() {
    throw ...
}

Я ищу способ сделать эту проверку только один раз для всего пакета.

Спасибо

1 Ответ

0 голосов
/ 09 сентября 2018

Я поставил здесь решение для тех, кто хочет сделать то же самое

В каждом контроллере ApiBundle я помещаю эту аннотацию, чтобы убедиться, что каждое имя маршрута имеет одинаковый префикс 'api_'

/**
 * Class SomeController.
 *
 * @Route("/some", name="api_")
 */
class SomeController extends Controller

в слушателе события запроса, я поставил эту проверку на событие KernelEvents :: REQUEST

$request = $event->getRequest();

if (!$event->isMasterRequest()) {
    return;
}

if ('api_' === substr($request->get('_route'), 0, 4) && !$request->isXmlHttpRequest()) {
    throw new MethodNotAllowedException(['ajax']);
}
...