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'
是将处理请求的控制器/动作,在本例中是ProductController
和actionItem
,参数为$name
。
现在您需要在 ProductController 中添加一个操作:
//...
/**
* Handle products by name
* @param string $name
*/
public function actionItem($name) {
// ... do stuff here
}
//...
可以在此处找到更多信息 Yii2 Routing and URL Creation。
将 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'
是将处理请求的控制器/动作,在本例中是ProductController
和actionItem
,参数为$name
。
现在您需要在 ProductController 中添加一个操作:
//...
/**
* Handle products by name
* @param string $name
*/
public function actionItem($name) {
// ... do stuff here
}
//...
可以在此处找到更多信息 Yii2 Routing and URL Creation。