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

Get Parameters Not returning correctly when using desired urlformat

我在 Yii2 中获取参数时遇到了一些麻烦。我有如下代码:

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

下面这个 returns:

/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

我的 url 经理如下所示:

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

让我们缩小问题范围。

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

'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);
    }
}

确保您的网络服务器重写规则适用于 .php 而不是 index.php。验证您是否可以 将所有后缀更改为 .html。我这样做是因为我的服务器配置为直接服务 .php

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

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

这意味着 Yii 工作正常,问题出在网络服务器配置上。