我想生成可以处理多个参数的URL。 例如:
www.example.com/product/index?brand=brand-name,
www.example.com/product/index?category=category-name,
我希望该网址像:
www.example.com/brand-name,
www.example.com/category-name
尝试了一些url规则,但无效。
'rules' => [
[
'pattern' => '<brand:\w+(-\w+)*>/<category:\w+(-\w+)*>',
'route' => 'product/index',
'defaults' => [
'brand' => null,
'category' => null,
]
]
]
这是我的参考资料:
答案 0 :(得分:0)
为此,您必须坚持使用前缀版本。因此,品牌参数应始终以brand-
为前缀,类别应始终以category-
为前缀。否则,无法分辨什么。
添加以下规则。这会将匹配brand-\w+
的所有内容放入brand
参数中,并将其传递给product/index
。类别相同。
'<brand:brand-\w+>' => 'product/index',
'<category:category-\w+>' => 'product/index',
查看它是否有效
public function actionIndex($brand = null, $category = null) {
echo "Brand: $brand<br />";
echo "Category: $category<br />";
echo Url::toRoute(['dev/index', 'brand' => 'brand-name']) . '<br />';
echo Url::toRoute(['dev/index', 'category' => 'category-name']) . '<br />';
}