Symfony1 自定义路由类

Symfony1 自定义路由类,symfony1,symfony,Symfony1,Symfony,在symfony 1.4中,您可以定义自定义路由类,在该类中,您可以使用自定义逻辑覆盖url的生成,例如: custom: class: sfDoctrineRouteCollection options: model: Custom prefix_path: /custom/category/:category_id column: id route_class:

在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);
  }

}
这允许为('custom_show',array('id'=>$object['id'])编写
url\u
,而不必担心上下文相关参数(category\u id)


你如何处理这是symfony2?

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

parameters:
    router.class: Company\CoreBundle\Routing\MyCustomRouter
有一个更强大(阅读:复杂)的解决方案,它允许您通过覆盖或扩展整个路由器服务来定义对路由器类的更多依赖。有一个包可以完成这个任务,你可以查看它是如何完成的


具体地说,请注意,它们将默认的
路由器
服务替换为自己的服务。然后,您必须在自己的路由器类中实现。在这个特定的bundle中,它们(在编译器过程中重命名了它之后)

在这里,我通过重写UrlGenerator解决了类似的问题: