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

时间:2015-09-25 20:03:54

标签: php ajax angularjs symfony routing

这个问题实际上是由 2 问题组成的。

一个我如何创建一定数量的路由,但所有其他路由都调用一个HTML页面(基本上,我希望Symfony2接收某些URL,但其他一切都留给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 }

之后的任何网址都应该通过后端ngRoute路径other加入角度。

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

2 个答案:

答案 0 :(得分:2)

我不太清楚我理解你需要什么。

您可以简单地创建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

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

答案 1 :(得分:1)

我接受@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控制器。