Symfony1 symfony路由规则中的多级别类别
我想创建一个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: (?
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,等等
注意这一点,因为此规则还捕获应用程序中的所有路由,所以在返回参数之前,需要在方法内部应用额外的验证
谢谢你的回复