Symfony1 symfony路由规则中的多级别类别

Symfony1 symfony路由规则中的多级别类别,symfony1,routing,Symfony1,Routing,我想创建一个symfony路由规则,其中可以有一个或多个级别,但最后一个级别很重要。为了更好地解释,这里有一个例子: home_category: url: /:sf_culture/:category1/:category2/:category3/:category4/:slug class: sfCategoryRoute param: { module: category, action: index } requirements: sf_culture: (?

我想创建一个symfony路由规则,其中可以有一个或多个级别,但最后一个级别很重要。为了更好地解释,这里有一个例子:

home_category:
  url:   /:sf_culture/:category1/:category2/:category3/:category4/:slug
  class: sfCategoryRoute
  param: { module: category, action: index }
  requirements:
    sf_culture: (?:es|en)
当前位置类别[n]是迪那米克,可以有一个或多个,最后一个对我来说很重要。有什么想法吗


非常感谢。

我想这样做可能会奏效:

home_category_1:
  url:   /:sf_culture/:category1/:slug
  param: { module: category, action: index }
home_category_2:
  url:   /:sf_culture/:category1/:category2/:slug
  param: { module: category, action: index }
home_category_3:
  url:   /:sf_culture/:category1/:category2/:category3/:slug
  param: { module: category, action: index }
home_category_4:
  url:   /:sf_culture/:category1/:category2/:category3/:category4/:slug
  param: { module: category, action: index }

。。。与每个可能的URL模式匹配的相同模块/操作。如果URL需要非常深入的层次,我可能会考虑将中间部分转换为单个变量,但可能其他人有更优雅的解决方案。

我的解决方案是扩展sfRequestRoute,并覆盖matchesUrl方法,如下所示:

public function matchesUrl($url, $context = array())
{
    $url_tmp = explode('/', substr($url, 1));
    $url = (count($url_tmp)>1) ? '/'.$url_tmp[0].'/'.end($url_tmp) : $url ;

    if (false === $parameters = parent::matchesUrl($url, $context))
    {
        return false;
    }
....
因此,规则/:category catch/category1/category2和/category1和category1/category2/category3,等等

注意这一点,因为此规则还捕获应用程序中的所有路由,所以在返回参数之前,需要在方法内部应用额外的验证

谢谢你的回复