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

问题描述

|| 我想创建一个symfony路由规则,其中可以有一个或多个级别,但最重要的是最后一个级别。为了更好的解释,这是一个“示例”:
home_category:
  url:   /:sf_culture/:category1/:category2/:category3/:category4/:slug
  class: sfCategoryRoute
  param: { module: category,action: index }
  requirements:
    sf_culture: (?:es|en)
:category [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需要深度很多,我可能会考虑将中间部分变成单个变量,但是也许其他人有一个更优雅的解决方案。     ,        我的解决方案是扩展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捕获/ category1 / category2和/ category1和category1 / category2 / category3等。 请注意这一点,因为该规则还会捕获应用程序中的所有路由,因此您需要在方法内部应用额外的验证,然后才能返回参数。 无论如何,谢谢您的答复。