Php 获取Yii2中的参数问题
我的问题是在get参数名称的开头有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
?
,
如果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+>'