【问题标题】:Custom route class自定义路由类
【发布时间】:2012-01-13 03:42:54
【问题描述】:

在 symfony 1.4 中,您可以定义一个自定义路由类,在其中使用自定义逻辑覆盖 url 的生成,例如:

custom:
  class: sfDoctrineRouteCollection
  options:
    model:                Custom
    prefix_path:          /custom/category/:category_id
    column:               id
    route_class:          CustomDoctrineRoute

class CustomDoctrineRoute extends sfDoctrineRoute
{
  public function generate($params, $context = array(), $absolute = false)
  {
    if (!isset($params['category_id'])) {
      $params['category_id'] = sfContext::getInstance()->getRequest()->getParameter('category_id');
    }

    return parent::generate($params, $context, $absolute);
  }

}

这允许写入url_for('custom_show', array('id'=> $object['id'])) 而不必担心上下文相关的参数(category_id)。

你是如何处理这个 symfony2 的?

【问题讨论】:

标签: symfony1 symfony


【解决方案1】:

我可以想到两种方法。第一个也是最简单的,是用你自己的扩展 Router 类,并告诉 symfony 在你的 parameters.yml 或 config.yml 中使用你的类:

parameters:
    router.class: Company\CoreBundle\Routing\MyCustomRouter

有一个更强大(阅读:复杂)的解决方案,它允许您通过覆盖或扩展整个路由器服务来定义对路由器类的更多依赖项。有一个名为BeSimpleI18nRoutingBundle 的捆绑包,您可以查看它以了解它是如何完成的。

特别注意CompilerPass,他们用自己的服务替换了默认的router。然后你必须在你自己的路由器类中实现RouterInterface。在这个特定的包中,他们inject the original default router(在编译器传递中重命名之后)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2018-03-12
    • 2016-05-17
    相关资源
    最近更新 更多