结合 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_user
、create_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
控制器。
这道题实际上有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_user
、create_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
控制器。