【问题标题】:Retrieving query string parameters in Slim Framework 3在 Slim Framework 3 中检索查询字符串参数
【发布时间】:2017-07-29 00:29:39
【问题描述】:

我在表单中有一个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

我被要求发布我的网络服务器配置。明天我可以访问那台开发机器,所以这只是提醒我自己添加上述信息。 不过 @jmattheis 已经给了我提示。

Slim Framework 3 setup for nginx 说了一些类似的话

location / {
        try_files $uri /index.php$is_args$args;
    }

而我正在使用曾经在某个时间点为 slim 2 建议的重写 sn-p:

location / {
        try_files $uri $uri/ /index.php?$request_uri;
    }

这个配置多年来一直对我很好,但碰巧我从未尝试过解析问号之后的任何内容。刚刚fork了一个废弃的项目,正在尝试将原始$_REQUEST解析转换为Slim路由方法。

编辑 2

该项目的代码库位于 repo phpPgAdmin6。它基本上是 phpPgAdmin 的一个分支,没有路由逻辑,所以我试图将请求和响应集中到给定的范围内,并使用 Slim 原生方法解析查询字符串。

【问题讨论】:

  • 哪个苗条的版本,对我来说一切正常。
  • 版本 3.8.1,我在文档根目录的子文件夹中运行应用程序,但这应该没有什么不同,不是吗?
  • 请发布您的 .htaccess 文件
  • 请让我们更多地了解您的应用程序目录结构和 .htaccess 文件的内容。作为旁注,您可以使用$args['subject'] 而不是$request->getAttribute('subject')
  • @jmattheis 就是这样。 try files 指令使用 $request_uri 而不是 $is_args$args。现在它按预期工作。请对此问题做出回答,说明该错误,以便我将其标记为已解决。当您的评论指出我正确的方向时,回答我自己的问题会感觉不对。

标签: slim


【解决方案1】:

你发现你需要使用

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 是作为查询键给出的。

【讨论】:

  • 是的,感谢您的评论,我注意到了这个缺陷。当然,当涉及到命名参数时,Slim 并没有抱怨这一点,但是查询字符串本身的行为现在真的不同了。我什至用问号爆炸`$request->getUri()->getQuery()` 来获取查询字符串。现在我不再需要它了!谢谢!
猜你喜欢
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多