Yii2 UrlManager 规则

Yii2 UrlManager rules

将 url 如 site/product?name=[name] 更改为 product/[name] 的 Urlmanager 规则是什么?

我试过了

'<action:\w+>' => 'site/<action>',
'product/<id:\d+>' => 'product',

但它给了我一个 404

在回答您的问题之前,先简单解释一下哪里出了问题。 您尝试将字母字符传递给仅处理整数的操作。 规则 'product/<id:\d+>' 表明 url 应该是这样的:

product/1
product/777
product/8888

正则表达式 \d+ 将此 url 部分限制为整数。

回答

对于 url 如 product/[name],您应该添加此模式:

//...
'product/<name:[\w]+>' => 'product/item',
//...

其中 'product/<name:[\w]+>' 将匹配任何 url,例如:

product/any
product/alpha
product/productname

<name:[\w]+> 将是保存匹配的 url 部分的参数,并创建一个名为 $name 的变量,由于正则表达式 [\w]+。此变量将传递给控制器​​操作。

'product/item'是将处理请求的控制器/动作,在本例中是ProductControlleractionItem,参数为$name

现在您需要在 ProductController 中添加一个操作:

//...
/**
 * Handle products by name
 * @param string $name
 */
public function actionItem($name) {
   // ... do stuff here
}
//...

可以在此处找到更多信息 Yii2 Routing and URL Creation