Yii2 url 管理器不使用 get 参数解析 urls
Yii2 url manager don't parse urls with get parameter
我创建了一个名为 catalog 的模块,目前在默认控制器中有两个操作:
- actionIndex
- actionLineProducts
在索引视图中我有一些 link 其中 运行 行产品的操作,url 是以下结果:
Url::to(['line-products', 'line' => $line->name])
我的目标是获得link喜欢
catalogue/{line-name}
其中 line-name 是我发送给操作 LineProducts 的参数。
我的 url 管理器配置是:
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'<moduls:catalogue>/<controller:default>/<action:line-products>/<line:*>' => '<module>/<line>',
'<controller:\w+>/<id:\d+>' => '<controller>/view/',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
],
.htaccess 配置:
RewriteEngine on
# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward it to index.php
RewriteRule . index.php
谁能解释一下为什么我的 URL 总是这样:
http://my-site.dev/catalogue/default/line-products?line={line-name}
您交换了配置。关键是从浏览器传递的 url 的模式。该值是路线。由于您使用的是特定模块、控制器和操作,因此您可以直接传递它们:
'rules' => [
'catalogue/<line>' => 'catalogue/default/line-products'
...
]
您可以阅读 Yii2 指南中的 Routing and Url Creation page 了解更多信息。
我创建了一个名为 catalog 的模块,目前在默认控制器中有两个操作:
- actionIndex
- actionLineProducts
在索引视图中我有一些 link 其中 运行 行产品的操作,url 是以下结果:
Url::to(['line-products', 'line' => $line->name])
我的目标是获得link喜欢
catalogue/{line-name}
其中 line-name 是我发送给操作 LineProducts 的参数。 我的 url 管理器配置是:
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
'<moduls:catalogue>/<controller:default>/<action:line-products>/<line:*>' => '<module>/<line>',
'<controller:\w+>/<id:\d+>' => '<controller>/view/',
'<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
],
.htaccess 配置:
RewriteEngine on
# If a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Otherwise forward it to index.php
RewriteRule . index.php
谁能解释一下为什么我的 URL 总是这样:
http://my-site.dev/catalogue/default/line-products?line={line-name}
您交换了配置。关键是从浏览器传递的 url 的模式。该值是路线。由于您使用的是特定模块、控制器和操作,因此您可以直接传递它们:
'rules' => [
'catalogue/<line>' => 'catalogue/default/line-products'
...
]
您可以阅读 Yii2 指南中的 Routing and Url Creation page 了解更多信息。