获取参数使用所需的urlformat时无法正确返回

时间:2015-07-07 01:34:04

标签: yii2 yii2-advanced-app yii-url-manager

我在Yii2中获得params时遇到了一些麻烦。我有以下代码:

Url::to(['support/about', 'id' => 100]);

这将返回以下内容:

  

/support/about.php?id=100

这正是我追求的目标。但是当我尝试通过在地址栏中输入并尝试使用以下内容获取id的值来对此进行逆向工程:

echo Yii::$app->request->getQueryParam('id');
echo Yii::$app->request->get('id');
echo $_GET['id'];

我一无所获。

但是当我使用时,我会得到正确的值:

  

/support/about/100.php

我的网址管理员如下:

        'urlManager' => [
                'enablePrettyUrl' => true,
                'showScriptName' => false,
                'enableStrictParsing' => false,
                'suffix' => '.php',
                //'cache' => 'cache',
                //'scriptUrl' => '',
                //'baseUrl' => '/',
                //'hostInfo' => 'http://www.yourhost.com.au',
                'routeParam' => 'r',
                'ruleConfig' => [
                        'class' => 'yii\web\UrlRule'
                ],
                'rules' => array(
                        [
                                'pattern' => '',
                                'route' => 'site/index',
                                'suffix' => '',
                        ],
                        [
                                'pattern' => '<action:\w+>',
                                'route' => 'site/<action>',
                                'suffix' => '.php',
                        ],
                        [
                                'pattern' => '<controller:support>',
                                'route' => '<controller>/index',
                                'suffix' => '/',
                        ],
                        [
                                'pattern' => '<controller:support>/<action:\w+>',
                                'route' => '<controller>/<action>',
                                'suffix' => '.php',
                        ],
                        [
                                'pattern' => '<module:\w+>/<action:\w+>',
                                'route' => '<module>/default/<action>',
                                'suffix' => '.html',
                        ],
                        [
                                'pattern' => 'gii',
                                'route' => 'gii',
                                'suffix' => '',
                        ],
                        [
                                'pattern' => '/<controller:\w+>/<action:\w+>',
                                'route' => 'gii/<controller>/<action>',
                                'suffix' => '',
                        ],
                        '<controller:\w+>/<id:\d+>' => '<controller>/view',
                        '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
                        '<controller:\w+>/<action:\w+>' => '<controller>/<action>',             
                ),
        ],

1 个答案:

答案 0 :(得分:4)

让我们稍微缩小一下问题。

由于您对特定网址有疑问,我们可以从网址管理器配置中删除与此案例无关的内容:

'urlManager' => [
    'enablePrettyUrl' => true,
    'showScriptName' => false,
    'rules' => [        
        [
            'pattern' => '<controller:support>',
            'route' => '<controller>/index',
            'suffix' => '/',
        ],
        [
            'pattern' => '<controller:support>/<action:\w+>',
            'route' => '<controller>/<action>',
            'suffix' => '.php',
        ],             
    ],
],

我删除了默认情况下相同的值,从不应用的规则和全局前缀,因为你是按照它设置的 无论如何。规则。

现在测试控制器:

<?php
namespace app\controllers;

use yii\web\Controller;

class SupportController extends Controller
{
    public function actionIndex()
    {
        return 'Hello, I am index.';
    }

    public function actionAbout()
    {
        echo \yii\helpers\Html::a(\yii\helpers\Url::to(['support/about', 'id' => 10]), ['support/about', 'id' => 10]);
        echo '<br>';
        echo \yii\helpers\VarDumper::dump(\Yii::$app->request->get(), 10, true);
    }
}

确保您的.phpindex.php的网络服务器重写规则正确无误。验证你可以 将所有后缀更改为.html。我做了,因为我的服务器配置为直接提供.php

关注http://example.com/support/about.html?id=10后,我收到以下信息:

/support/about.html?id=10
[
    'id' => '10'
]

这意味着Yii工作正常,问题出在webserver配置上。