在 Slim Framework 3 中检索查询字符串参数
Retrieving query string parameters in Slim Framework 3
我有一个 get
形式的路由
$app->get('/redirect[/{subject}]', function ($request, $response, $args) {
});
如果我向 /redirect/server?site=local&name=john
提出请求
我可以用
得到 subject
$request->getAttribute('subject')
但是,我无法获取查询参数。如果我检查 $request->getQueryParams()
我得到:
[
'/redirect/server?site' => 'local',
'name' => 'john'
]
而我希望查询参数是
[
'site' => 'local',
'name' => 'john'
]
我做错了什么?也许我应该指定 url 参数不能接受问号?
编辑 1
有人要求我 post 我的网络服务器配置。我明天可以访问那台开发机器,所以这只是提醒我自己添加上述信息。 但是 @jmattheis 已经给了我提示。
Slim Framework 3 setup for nginx 大致说了句
location / {
try_files $uri /index.php$is_args$args;
}
而我使用的是在某个时间点建议用于 slim 2 的重写代码段:
location / {
try_files $uri $uri/ /index.php?$request_uri;
}
此配置多年来对我来说运行良好,但碰巧我从未尝试过解析问号后面的任何内容。就在现在,我 fork 了一个废弃的项目,我正试图将原始 $_REQUEST
解析转换为 Slim 路由方法。
编辑 2
该项目的代码库位于没有路由逻辑的 repo phpPgAdmin6. It's basically a fork of phpPgAdmin 中,因此我试图将请求和响应集中到给定范围内,并使用 Slim 本机方法解析查询字符串。
如您所见,您需要使用
location / {
try_files $uri /index.php$is_args$args;
}
而不是
location / {
try_files $uri $uri/ /index.php?$request_uri;
}
第二个将整个请求 uri 添加为查询参数,结果类似于这样
index.php?/redirect/server?site=local&name=john
因此 /redirect/server?site
被指定为查询键。
我有一个 get
形式的路由
$app->get('/redirect[/{subject}]', function ($request, $response, $args) {
});
如果我向 /redirect/server?site=local&name=john
我可以用
得到subject
$request->getAttribute('subject')
但是,我无法获取查询参数。如果我检查 $request->getQueryParams()
我得到:
[
'/redirect/server?site' => 'local',
'name' => 'john'
]
而我希望查询参数是
[
'site' => 'local',
'name' => 'john'
]
我做错了什么?也许我应该指定 url 参数不能接受问号?
编辑 1
有人要求我 post 我的网络服务器配置。我明天可以访问那台开发机器,所以这只是提醒我自己添加上述信息。 但是 @jmattheis 已经给了我提示。
Slim Framework 3 setup for nginx 大致说了句
location / {
try_files $uri /index.php$is_args$args;
}
而我使用的是在某个时间点建议用于 slim 2 的重写代码段:
location / {
try_files $uri $uri/ /index.php?$request_uri;
}
此配置多年来对我来说运行良好,但碰巧我从未尝试过解析问号后面的任何内容。就在现在,我 fork 了一个废弃的项目,我正试图将原始 $_REQUEST
解析转换为 Slim 路由方法。
编辑 2
该项目的代码库位于没有路由逻辑的 repo phpPgAdmin6. It's basically a fork of phpPgAdmin 中,因此我试图将请求和响应集中到给定范围内,并使用 Slim 本机方法解析查询字符串。
如您所见,您需要使用
location / {
try_files $uri /index.php$is_args$args;
}
而不是
location / {
try_files $uri $uri/ /index.php?$request_uri;
}
第二个将整个请求 uri 添加为查询参数,结果类似于这样
index.php?/redirect/server?site=local&name=john
因此 /redirect/server?site
被指定为查询键。