axis/axis-s2-routing-plugin

此包已被废弃且不再维护。未建议替代包。

symfony 1.x 插件,将 symfony2 路由组件集成到您的应用中

dev-master 2012-12-16 03:04 UTC

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