问题 如何使用别名和$ _GET参数配置yii2 urlManager规则


对于我当前(高级)基于yii2的项目,我只需要一个控制器(SiteController)。所以没有必要在网址中显示它。这就是为什么我将此规则添加到前端配置:

'urlManager' => [
    'rules' => array(
        '<alias:product|contact|about>' => 'site/<alias>',
    ),

这工作正常 本地主机/产品 指着 本地主机/网站/产品

当然,我激活了prettyUrl并将此默认规则添加到公共配置:

 'rules' => array(
                '<controller:\w+>/<id:\w+>' => '<controller>',
                '<controller:\w+>/<action:\w+>/<id:\w+>' => '<controller>/<action>',
                '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
            ),

现在我想要访问这样的GET参数: 本地主机/产品/产品名。但我得到错误:

无法解决请求“产品”

本地主机/网站/产品/产品名称 工作正常...... “productname”应为$ _GET ['id']。为了实现这一目标,我需要改变什么?

谢谢!


6567
2017-12-05 13:16


起源



答案:


您的规则应该在默认规则之前,并且您需要2个规则,例如:

'rules' => array(
    '<alias:contact|about>' => 'site/<alias>',
    '<alias:product>/<id:\w+>' => 'site/<alias>',
    '<controller:\w+>/<id:\w+>' => '<controller>',
    '<controller:\w+>/<action:\w+>/<id:\w+>' => '<controller>/<action>',
    '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
),

11
2017-12-05 13:50



什么是w +? - Yasar Arafath
@YasarArafath \w 匹配任何单词字符(等于[a-zA-Z0-9_]) - Muhammad Omer Aslam


答案:


您的规则应该在默认规则之前,并且您需要2个规则,例如:

'rules' => array(
    '<alias:contact|about>' => 'site/<alias>',
    '<alias:product>/<id:\w+>' => 'site/<alias>',
    '<controller:\w+>/<id:\w+>' => '<controller>',
    '<controller:\w+>/<action:\w+>/<id:\w+>' => '<controller>/<action>',
    '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
),

11
2017-12-05 13:50



什么是w +? - Yasar Arafath
@YasarArafath \w 匹配任何单词字符(等于[a-zA-Z0-9_]) - Muhammad Omer Aslam


例如,只需在动作中定义var即可 public function actionProduct($id) 和 $id 一直是 $_GET['id']


-1
2017-12-05 13:38



我做了,错误仍然存​​在。 - ESCOBAR