是否可以仅限制 AJAX 的路由?

2022-08-30 10:15:31

是否可以仅限制 XHR 请求的 Symfony 2 路由?我想声明只能通过AJAX访问的路由。

我不想在每个特定于AJAX的操作中加入一些额外的行,如下所示:

if ($request->isXmlHttpRequest()) {
    // do something
} else {
    // do something else
}

我想定义:

  • AJAX 请求的一个规则
  • 一个规则,用于将请求发送到同一 URL

为了绕过像上面这样的条件。


答案 1

我知道这个问题有点旧,但与此同时,在Symfony 2.4中引入了一种新的实现方式。

匹配表达式

对于 ajax 限制,它看起来像这样:

contact:
    path:     /contact
    defaults: { _controller: AcmeDemoBundle:Main:contact }
    condition: "request.isXmlHttpRequest()"

也可以在注释中:

/**
 * ContactAction
 *
 * @Route("/contact", name="contact", condition="request.isXmlHttpRequest()")
 */

答案 2

我的建议是定义您自己的路由器服务而不是默认值,这将从 扩展而来,并通过实现您自己的逻辑来处理其他要求来重新定义方法 resolveParameters()。Symfony\Bundle\FrameworkBundle\Routing\Router

然后,您可以在路由中执行如下操作:

your_route:
    pattern:  /somepattern
    defaults: { somedefaults }
    requirements:
        _request_type:  some_requirement

推荐