我想创建一个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]是dinamics,可以来一个,最后一个对我很重要。有什么想法吗?
非常感谢。
答案 0 :(得分:0)
我认为这样的事情可能会成功:
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需要很多级别,我可能会考虑将中间部分转换为单个变量,但也许其他人有更优雅的解决方案。
答案 1 :(得分:0)
我的解决方案是扩展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;
}
....
所以,规则/:类别catch / category1 / category2和/ category1以及category1 / category2 / category3,等等。
要小心,因为此规则还会捕获应用程序中的所有路由,所以在返回参数之前,需要在方法内部应用额外的验证。
谢谢你的回复。