使用所需的 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 工作正常,问题出在网络服务器配置上。
我在 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 工作正常,问题出在网络服务器配置上。