Yii2中漂亮的网址格式

时间:2018-07-21 11:31:11

标签: php yii2

我有一个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&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']]);

2 个答案:

答案 0 :(得分:0)

您需要在开始时放置最精确的规则:

'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',
],

并创建如下网址:

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

答案 1 :(得分:0)

我认为,您要寻找的是以下规则:

> '<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可以更好地理解