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

Chr*_*ris 50 php ajax symfony

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

我不想在每个特定于AJAX的操作中添加一些额外的行:

if ($request->isXmlHttpRequest()) {
    // do something
} else {
    // do something else
}
Run Code Online (Sandbox Code Playgroud)

我想定义:

  • AJAX请求的一条规则
  • 对同一URL的GET/POST请求的一条规则

为了避开上述条件.

Mar*_*der 93

我知道这个问题有点老了但同时在Symfony 2.4中引入实现这一目标的新方法.

完全自定义的路线匹配条件

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

contact:
    path:     /contact
    defaults: { _controller: AcmeDemoBundle:Main:contact }
    condition: "request.isXmlHttpRequest()"
Run Code Online (Sandbox Code Playgroud)

也可以在注释中:

/**
 * ContactAction
 *
 * @Route("/contact", name="contact", condition="request.isXmlHttpRequest()")
 */
Run Code Online (Sandbox Code Playgroud)

  • 我认为你的意思是`XMLHttpRequest`,XML大写. (2认同)

Vit*_*ian 10

我的建议是定义你自己的路由器服务而不是默认路由器服务,它将扩展Symfony\Bundle\FrameworkBundle\Routing\Router,并重新定义方法resolveParameters(),实现你自己的逻辑来处理额外的需求.

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

your_route:
    pattern:  /somepattern
    defaults: { somedefaults }
    requirements:
        _request_type:  some_requirement
Run Code Online (Sandbox Code Playgroud)