3

我正在使用 Symfony 和 API 平台,我想过滤嵌套属性

虽然这看起来很简单,但当我去:

http://localhost:8000/api/offers?product.color=red

请求被重定向到:

http://localhost:8000/api/offers?product_color=red.

点被下划线代替。

我不完全理解为什么会发生这种情况,但是关于这种行为有一个封闭的问题:

关闭它,因为这只是 PHP 解析 HTTP 请求的方式,我们不会解决这个问题。

如何过滤嵌套属性?

4

1 回答 1

2

PHP 和 Symfony(API 平台)都不会执行重定向,将所有句点 ( .) 替换为 undescore ( _)。

在内部,PHP 转换包含句点的查询参数名称,因为这些不是变量名称的有效字符。这样做是为了保持与正在运行的安装register_globals的兼容性(现在几乎无处)。但这不会导致重定向

如果您被重定向,您可以检查浏览器的开发人员控制台,以准确查看您获得的响应标头类型。例如:

在此处输入图像描述

请注意Status code: 302在这种情况下。如果您被重定向,您应该收到 a302或 a 301

但是如果有任何重定向,由于您设置的某些规则,它必须发生在 Web 服务器级别。

在我为 Api-Plaform 运行的漂亮安装中,我可以毫无问题地请求这样的 url http://localhost:9097/api/boost_leads?channel.partner=18695(注意channel.partner),并正确获得响应(200状态码,无重定向):

在此处输入图像描述

于 2019-11-20T10:20:18.987 回答