【问题标题】:Pretty Url formattion in Yii2Yii2中漂亮的Url格式
【发布时间】:2018-12-29 12:54:30
【问题描述】:

我有一个 Yii 2 应用程序,我想使用一些漂亮的 URL。在我的配置文件中,我已经使用以下规则启用了漂亮的 URL:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    //'suffix' => '.html',
    'rules' => [
          '<controller:\w+>/<id:\d+>' => '<controller>/view',
          '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
          '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
          '<controller:\w+>/<action:\w+>/<slug:[a-zA-Z0-9_-]+>/' => '<controller>/<action>/<slug>',
          '<controller:[\w\-]+>/<action:[\w\-]+>/slug/<slug:\d+>/id/<id:\w+>/itmNo/<itmNo:\w+>' => '<controller>/<action>/<slug>',
    ],
],

URL 结果是这样的http://192.168.1.101/myproject/item?Id=mens-body-fitted-t-shirt-2018-summer-fashion-2&amp;itmNo=82813720

在上面的 URL 中,item 是控制器,而 IditmNO 是查询,我想在 URL http://192.168.1.101/myproject/item/mens-body-fitted-t-shirt-2018-summer-fashion-2/82813720 下得到类似的东西

查询名称替换为/。如何在 Yii2 中执行此操作,并且仍然在我的控制器中获取查询以进行正常搜索?

我的网址创建看起来像这样

$myurl = \Yii::$app->UrlManager->createUrl(['/item','Id'=>$items['slug'].'-'.$items['product_id'],'itmNo'=>$items['item_number']]);

【问题讨论】:

    标签: php yii2


    【解决方案1】:

    你需要把最精确的规则放在开头:

    'rules' => [
        '<controller:[\w\-]+>/<action:[\w\-]+>/slug/<slug:\d+>/id/<id:\w+>/itmNo/<itmNo:\w+>' => '<controller>/<action>',
        '<controller:\w+>/<action:\w+>/<slug:[a-zA-Z0-9_-]+>/' => '<controller>/<action>',
        '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
        '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
        '<controller:\w+>/<id:\d+>' => '<controller>/view',
    ],
    

    并像这样创建 URL:

    $myurl = \Yii::$app->UrlManager->createUrl([
        '/item/view',
        'id' => $items['product_id'],
        'slug' => $items['slug'],
        'itmNo' => $items['item_number'],
    ]);
    

    【讨论】:

    • 我试过了,但是 url 不会改变,这是否意味着我需要在创建它时从 url 中删除查询参数,我的 url 创建看起来像这样 $myurl = \Yii:: $app->UrlManager->createUrl(['/item','Id'=>$items['slug'].'-'.$items['product_id'],'itmNo'=>$items['item_number ']]);
    • 请将此添加到您的问题中,这在评论中无法阅读。
    【解决方案2】:

    我想,你要找的是这条规则:

    > '<controller:[\w\-]+>/<action:[\w\-]+>/<id:[\w\-]+>/<itmNo:\w+>'=>'<controller>/<action>'
    

    在这种情况下,您应该指定控制器名称、id 和 itmNo 作为参数。不要忘记将这条规则放在更一般的规则之前。 示例查询:

    \Yii::$app->UrlManager->createUrl(['item/view','id'=>'slug'.'-'.'2', 'itmNo'=>'12313'])
    

    阅读this post以更好地理解

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 2017-04-16
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      相关资源
      最近更新 更多