Ограничить маршруты вызовом Ajax, это возможно в Symfony 2.6+?

Я ищу лучший способ добиться «автоматического» ограничения маршрутизации для вызовов Ajax. Прямо сейчас я делаю следующее:

/**
* @Secure(roles="IS_AUTHENTICATED_FULLY")
* @Route("/someRoute", name="someRoute")
* @Method("POST")
*/
public function eliminarFacturasAction(Request $request)
{
$response['success'] = false;
$status              = 400;

if ($request->isXmlHttpRequest()) {
// needs to set $response values and $status=200 all the time
} else {
// needs to handle the exception and return Json response
}

return new JsonResponse($response, $status ?: 200);
}

Чтобы избежать этого, я мог бы использовать это вместо этого?

 @Route("/someRoute",
name="routeName",
condition="request.headers.get('X-Requested-With') == 'XMLHttpRequest'")

Я использую JQuery как только JS Framework, так XMLHttpRequest не будет проблемой. Какое исключение будет вызвано, если маршрут не выполняется через Ajax-вызов? Могу ли я поймать это и показать сообщение пользователям? Или показать какую-то страницу 404?

Я нашел похожий вопрос Вот но не совсем понятно для меня

2

Решение

Вы можете сделать это в слушателе kernel.request.

class DisallowNonXmlHttpRequestListener
{
public function checkRequest(GetResponseEvent $event)
{
if (!$event->getRequest()->isXmlHttpRequest()) {
throw new AccessDeniedHttpException();
}
}
}

И в ваших сервисах конфиг:

services:
disallow_non_xml_http_request_listener:
class: DisallowNonXmlHttpRequestListener
tags: [{ name: kernel.event_listener, event: kernel.request, method: checkRequest }]
5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]