结合 AngularJS 和 Symfony2 - 路由和非 ajax 页面访问

Combining AngularJS and Symfony2 - routing and non-ajax page access

这道题实际上有2道题。

一个是我如何创建一定数量的路由,但所有其他路由调用一个HTML页面(基本上,我希望Symfony2接受某些URL's,但其他一切都留给 AngularJS).

get_user:
    path:     /api/getuser
    defaults: { _controller: AcmeDemoBundle:Api:GetUser }
create_user:
    path:     /api/createuser
    defaults: { _controller: AcmeDemoBundle:Api:CreateUser }
...
other:
    path      [[ what to put in? ]]
    defaults: { _controller: AcmeDemoBundle:Main:GetPage }

之后的任何 url,angular 应该通过后端 other 路由接收 ngRoute

现在我的第二个问题是,是否可以限制所有路由(get_usercreate_user...),除了other 不是 AJAX 的任何类型呼叫的路由?对于那些知道ASP.NET的人,我想要命名文件_file.cshtml的结果(你不能直接访问它,只能通过AJAX调用)

我不太确定我是否了解您的需求。

您可以简单地创建 angularJS 路由并在相同或其他 URL 上编写 Symfony2 路由,但方法不同。

如果你真的想为多个 URL 定义一个路由,你可以使用参数作为 URI 部分,像这样:

other
    pattern:   /{first}/{page}
    defaults:  {  _controller: AcmeDemoBundle:Api:GetPage }
    requirements:
        first: keyword|secondKeyword
        two:  \d+

在此示例中,url 的第一个参数可以是关键字之一,第二个参数必须由正则表达式验证。

然后,如果您想将路由限制为 AJAX 个呼叫,请使用条件:

create_user:
    path:     /api/createuser
    defaults: { _controller: AcmeDemoBundle:Api:CreateUser }
    condition: "request.isXmlHttpRequest()"

或将您的路线限制为特定方法:

create_user:
    path:     /api/createuser
    defaults: { _controller: AcmeDemoBundle:Api:CreateUser }
    methods: POST

但我认为你必须为每条路线定义它。

我接受@chalas_r的回答,因为它确实解决了我的一些担忧,但是对于那些运行进入这个问题的人来说,这是我第一个问题的解决方案有:RIGHT HERE

简而言之,这是我现在的 other 路线:

other:
    pattern: /{first}
    defaults: { _controller: AppBundle:Default:index }
    requirements:
        first: ".+"

requirements: first: ".+" 基本上覆盖了用 / 字符分隔 URL 的默认 [^/]+ 值。所以现在我可以制定自己的路线,例如:

localhost:8000/my/route/i/just/made/up

它仍然会带我到 AppBundle:Default:index 控制器。