2

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フレームワークとしてのみ使用しているのでXMLHttpRequest問題ありません。route が Ajax 呼び出しで実行されない場合、どのような例外がトリガーされますか? それをキャッチしてユーザーにメッセージを表示できますか? または、ある種の 404 ページを表示しますか?

ここで同様の質問を見つけましたが、まったくわかりません

4

1 に答える 1

5

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 }]
于 2015-01-16T15:26:20.833 に答える