这个问题实际上是由 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_user
,create_user
...),other
除外任何非AJAX呼叫的路由?对于那些了解ASP.NET的人,我想要命名文件_file.cshtml
的结果(你不能直接访问它,只能通过AJAX调用)
答案 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
控制器。