我在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>',
),
],
答案 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);
}
}
确保您的.php
非index.php
的网络服务器重写规则正确无误。验证你可以
将所有后缀更改为.html
。我做了,因为我的服务器配置为直接提供.php
。
关注http://example.com/support/about.html?id=10
后,我收到以下信息:
/support/about.html?id=10
[
'id' => '10'
]
这意味着Yii工作正常,问题出在webserver配置上。