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

时间:2014-12-05 13:16:39

标签: php url-routing yii2

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

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

这很好, localhost / product 指向 localhost / site / product

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

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

现在我想要访问这样的GET参数: localhost / product / productname 。但是我得到了错误:

  

无法解析请求“产品”

localhost / site / product / productname 正常运行... “productname”应为$ _GET ['id']。为了实现这一目标我需要做些什么改变?

谢谢!

2 个答案:

答案 0 :(得分:12)

您的规则应该在默认规则之前,并且您需要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>',
),

答案 1 :(得分:-1)

只需在您的操作中定义var,例如public function actionProduct($id)$id已为$_GET['id']