Yii2 url 管理器不使用 get 参数解析 urls

Yii2 url manager don't parse urls with get parameter

我创建了一个名为 catalog 的模块,目前在默认控制器中有两个操作:

  1. actionIndex
  2. 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 了解更多信息。