axis / axis-s2-routing-plugin
symfony 1.x 插件,将 symfony2 路由组件集成到您的应用中
Requires
- php: >=5.3.0
- composer/installers: *
- symfony/config: 2.1.x-dev
- symfony/routing: 2.1.x-dev
This package is not auto-updated.
Last update: 2020-05-01 16:23:21 UTC
README
symfony 1.x 插件,将 symfony2 路由组件集成到您的应用中。
试图将 symfony2 路由引入 symfony1 的尝试失败了。但是 sfPatternRouting
类与 symfony1 深度集成,实际上不可能用另一个路由实现来替换它。
参见 AxisCurlyRoutingPlugin。它使用 Symfony2 路由系统在较低级别(不替换 sfPatternRouting,只是引入新的路由类)。
安装
使用 Composer。只需将此依赖项添加到您的 composer.json
"require": { "axis/axis-s2-routing-plugin": "dev-master" }
配置
首先,您应该将标准的 routing.yml
配置处理程序替换为新的处理程序。将以下内容添加到您的 config_handlers.yml
config/routing.yml: class: \Axis\S1\S2Routing\Config\ConfigHandler file: %SF_PLUGINS_DIR%/AxisS2RoutingPlugin/lib/Axis/S1/S2Routing/Config/ConfigHandler.php
然后通过将以下内容添加到您的 factories.yml
来将 symfony 的默认 sfPatternRouting
替换为插件的路由类
all: routing: class: \Axis\S1\S2Routing\Routing param: router: @axis.s2routing.router generate_shortest_url: true extra_parameters_as_query_string: true
用法
现在您可以在 routing.yml
文件中使用新的 Symfony2 路由组件 语法定义路由,同时使用旧路由。只需定义 sf2Route
作为路由类即可。
s2_hello: # Symfony2 route class: sf2Route url: '/s2/{name}' param: { module: test, action: hello } s1_hello: # symfony1 route url: '/s1/:name' param: { module: test, action: hello }
重要提示
sfActions::getRoute()
将为新 S2 路由返回sf2Route
类,并为旧路由返回sfRoute
(或子类)实例,就像之前一样。 请注意:sf2Route
与 symfony1 的sfRoute
实例不兼容。- 目前此插件与 AxisModuleRoutingPlugin 不兼容。但我正在努力解决这个问题。
- 目前不支持 S2 路由的集合和对象路由。
优点
这是为什么?
symfony1 路由系统已经过时。主要问题是它严格限制您的路由应该如何看起来以及可以使用什么作为变量值。
强大的缓存
S2RoutingPlugin
将强大的 Symfony2 路由缓存引入到您的项目中。
分层 URL
集成 S2 路由的触发原因是能够在路由中使用 路径变量。例如,您想在 URL 中使用类似于分层结构的某种东西
您可以使用默认的 symfony1 路由来做这件事
asset: url: /:path/:filename.:sf_format param: { ... } requirements: path: .*
这对于将来自 /my/assets/path/image.png
的请求路由到定义的控制器来说工作得很好,但当您需要为该路径生成 URL 时,您会得到这个:/my%2Fassets%2Fpath/image.png
。
是的,自定义编写的路由类可以处理这个问题。但 S2 路由可以开箱即用地做这件事
asset: url: /{path}/{filename}.{sf_format} param: { ... } class: sf2Route requirements: path: .*
还有许多其他实用功能可供使用。
由任意符号分隔的变量
blog_post: url: /blog/{slug}-{id}.html # you cannot use path like '/blog/:slug-:id.html' using symfony1 routing param: { ... } class: sf2Route requirements: slug: .+ id: \d+
方案要求
login: url: /login param: { ... } class: sfRoute requirements: _scheme: https