Php 获取Yii2中的参数问题

Php 获取Yii2中的参数问题,php,web,yii2,yii-url-manager,Php,Web,Yii2,Yii Url Manager,我的问题是在get参数名称的开头有?, 如果url是 https://example.com/path?id=2 我将获得一个名为?id的get参数。如何在没有?的情况下获取id,而不是使用以下方式: https://example.com/path?&id=2 它是有线的:) ----------------以下是详细信息---------------- url管理器配置: [ “urlManager”=>[ “enablePrettyUrl”=>true, 'showScript

我的问题是在get参数名称的开头有
, 如果url是

https://example.com/path?id=2
我将获得一个名为
?id
的get参数。如何在没有
的情况下获取
id
,而不是使用以下方式:

https://example.com/path?&id=2
它是有线的:)

----------------以下是详细信息----------------

url管理器配置:

[
“urlManager”=>[
“enablePrettyUrl”=>true,
'showScriptName'=>false,
“规则”=>[
[
'模式'=>'/login',
'路由'=>'帐户/默认/登录',
],
[
'模式'=>'//',
“路由”=>“/”,
“默认设置”=>[
“lang”=>“zh”,
“模块”=>“仪表板”,
“控制器”=>“默认值”,
“操作”=>“索引”,
],
],
],
],
];
你看,我将使用
lang
参数来控制网站的语言版本。我发现Yii将
lang
作为get参数处理。这就是问题所在。
lang
可能是第一个get参数,因此php将
作为参数名称的一部分处理

如果我打印get参数,我会得到这个

https://example.com/en/modules/controller/action?id=1
代码如下:

var_dump(\Yii::$app->request->get());
它将打印:

array(2) { ["lang"]=> string(3) "en" ["?id"]=> string(1) "1" }
THX很多。

在匹配的模式中包括
ID
参数。 将捕获斜杠后的数字,并将其作为
$id
方法参数提供给您的操作

如果您想使用问号而不是斜杠来分隔动作和参数,我想您可以使用以下模式:

'pattern' => '<lang:(zh|en|api)>/<modules>/<controller>/<action>?<id:\d+>'
“模式”=>“/?”

但是我没有试过。

谢谢你的回答。这里
id
只是一个例子。这里的主要问题是
将添加到第一个参数的名称中。如果我使用
https://example.com/path?&id=1
我将获得正确的参数。但是如果我重新加载页面,chrome将删除空参数,并将导致错误:(.php将获得
?id
而不是
id
。这很有意义,似乎定义了第一个参数,而在url的开头,没有定义第二个参数,会混淆
UrlManager
,如果在模式中定义第二个参数,则生成的url将是
https://example.com/zh/controller/action/1
没有
&
令牌,然后您将收到
id
或您使用的任何名称,参数,您尝试过了吗?我尝试过,但我担心它可能无法满足我的请求。一些api需要
id
参数,但其他api可能不需要。而其他api可能会请求多个参数o至少有一个
包含在一个参数的名称中。我的解决方案现在是在
后面包含一个无意义的get参数作为第一个参数(Yii中的第二个参数):(.你能包含你的
.htaccess
?看起来url正在被重写。
'pattern' => '<lang:(zh|en|api)>/<modules>/<controller>/<action>/<id:\d+>',
'pattern' => '<lang:(zh|en|api)>/<modules>/<controller>/<action>?<id:\d+>'