我正在使用Yii2的漂亮网址,想要使用我UrlManager
中定义的规则,但没有找到关于如何在'pattern' => 'route'
规则集中定义变量的任何文档。找到了一些像
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing' => false,
'rules' => [
"home" => "site/index",
"login" => "site/login",
"sign-up" => "site/sign-up",
'<controller:[\w-]+>/<id:\d+>' => '<controller>/view',
],
],
但:[\w-]+
或:\d+
代表什么?
例如,如果我想要定义一个模式以指向需要两个参数的动作
,该怎么办?class MyController extends Controller{
...
public function actionMyAction($param1, $param2){
...
}
}
现在我希望我的网络用户输入网址栏www.mysite.com/my-controller/my-action/X-Y
,其中X
的值为$param1
而Y
的值为$param2
并使用-
作为参数分隔符。
感谢。
答案 0 :(得分:2)
[\ w - ] +和\ d +是正则表达式,第一个表示任何字母或短划线字符,重复一次或多次,该部分仅指示数字,重复一次或多次。
在规则表达式中,您使用<variable name:regex>
为路径添加占位符,该占位符将解析为传递给控制器操作的变量。
如果$ param1和$ param2都是数字,则规则应如下所示。
'my-controller/my-action/<param1:\d+>-<param2:\d+>' => 'my-controller/my-action',
如果你需要字母,请交换\ w。