当前位置: 首页 > 知识库问答 >
问题:

Symfony HttpClient GET请求具有多个同名查询字符串参数

彭高畅
2023-03-14

我试图以以下格式提出API请求:

/api/v1/courses?enrollment_state=active&include[]=total_students&include[]=term

如何使用HttpClient组件查询字符串参数执行此操作?

$response = $client->request('GET', '/api/v1/courses', [
      'query' => [
           'enrollment_state' => 'active',
           'include[]' => 'term',
           'include[]' => 'total_students',
       ],
]);

由于重复数组键,上述方法不起作用?

我也尝试过:

'include[]' => ['term', 'total_students']

共有2个答案

罗鸿畴
2023-03-14

正如@user1392897所说,@yivi snippet返回url查询字符串中的索引。

https://www.example.com/?foo[0]=bar&foo[1]=baz

这是因为它使用了http\u build\u query内置函数,这是函数行为。您可以在没有索引的情况下读取这个php url查询嵌套数组线程。

解决方法是自己从数组中构建查询字符串,并将其附加到url中,HttpClient的第二个参数-

function createQueryString(array $queryArray = []): ?string
{
    $queryString = http_build_query($queryArray, '', '&', \PHP_QUERY_RFC3986);
    $queryString = preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '%5B%5D=', $queryString); //foo[]=x&foo[]=y
    
    return '' !== $queryString ? $queryString : null;
}

$queryArray = [
    'abc' => ['one', 'two']
];

$queryString = createQueryString($queryArray);

$url = 'https://www.example.com/';
if (is_string($queryString)) {
    $url = sprintf('%s?%s', $url, $queryString);
}

$response = $client->request('GET', $url);

戚侯林
2023-03-14

创建相当于:

https://www.example.com/?token=foo&abc[]=one&abc[]=two

只要做:

$client->request(
    'GET',
    'https://www.example.com/',
    [
        'query' => [
            'token' => 'foo',
            'abc' => ['one', 'two']
        ]
    ]
);
 类似资料:
  • 问题内容: 我有一个HTTP客户端(目前)的Node.js应用程序。所以我在做: 这似乎是完成此任务的一种好方法。但是,我有些沮丧,我必须执行此步骤。这应该由一个公共库封装,但是我还没有看到它存在于node的库中,而且我不确定哪个标准的npm包可以完成它。有没有一种合理使用的更好的方法? url.format方法节省了构建自己的URL的工作。但理想情况下,请求的级别也应高于此级别。 问题答案: 检

  • 我想知道EXPRESS如何解析同名的多个查询参数;我在任何地方都找不到任何有用的参考资料。我想具体了解EXPRESS,它将如何处理这个URL

  • 我有一个查询字符串,可以是: 编辑:参数值的长度可以大于2 有人知道在String.ReplaceAll([regex],[replace])中使用什么好的regex表达式吗?

  • 问题内容: 我正在努力在路由中传递和读取多个查询字符串参数。 这是搜索页面: 这是JobOffersController: 读取$ routeParams根本不起作用。如果我将“ developer”作为关键字,将“ New York”作为位置,则$ routeParam对象如下所示: 有人可以告诉我我在做什么错吗?提前致谢。 PS这可能是由于错误配置的路由吗?当我通过该函数导航时,它会将URL编

  • 问题内容: 我的问题是给定的代码: 我访问: 我应该期望[‘a’,’bbb’]的输出,除了Flask似乎只接受第一个参数而忽略其余参数。 这是Flask的限制吗?还是设计使然? 问题答案: 你可以使用与Django类似的,但由于某些原因,Flask文档中未提及: 结果是: 使用如果参数是查询字符串(如题),如果值来自具有相同名称的多个表单输入。 结合了两者,但通常应避免使用更具体的集合。

  • 我的目标是所有下面的URI都应该工作 https://rest/xyz?sort=name https://rest/xyz?排序=名称 https://rest/xyz?过滤器=名称=值 https://rest/xyz?Filter=name=value 为了实现这一点,我创建了自定义过滤器,该过滤器覆盖了传递给过滤器链的HttpServlet请求。以下是此方法的链接: http://foru