You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony RedirectResponse错误:ResponseHeaderBag参数类型不匹配求助

搞定Symfony RedirectResponse的类型错误问题

嘿,这个错误我之前也碰到过,根源其实是你把RedirectResponse的参数顺序搞混啦!

为啥会报错?

先看一下Symfony里RedirectResponse的构造函数要求:

public function __construct(string $url, int $status = 302, array $headers = [])

它三个参数的顺序是:目标URL字符串 → HTTP状态码(整数,默认302)→ 响应头数组(可选)

再看你的代码:

return new RedirectResponse('persons', array(), UrlGeneratorInterface::RELATIVE_PATH);

你把空数组传给了第二个参数(它要的是整数状态码),又把UrlGeneratorInterface::RELATIVE_PATH这个整数常量传给了第三个参数(它要的是数组)。当父类Response用这个整数去初始化ResponseHeaderBag的时候,自然就触发了「需要数组却传入整数」的类型错误。

另外还有个小误区:'persons'如果是路由名称的话,不能直接丢给RedirectResponse,得先通过路由生成器转成对应的URL才行,RELATIVE_PATH是给路由生成器用的参数,不是给RedirectResponse的。

正确的写法应该是这样

方法一:手动用路由生成器生成URL

先在你的控制器方法里注入UrlGeneratorInterface,然后生成相对路径的URL,再创建重定向响应:

use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

public function yourControllerMethod(UrlGeneratorInterface $urlGenerator)
{
    // 生成相对路径的persons路由URL
    $targetUrl = $urlGenerator->generate('persons', [], UrlGeneratorInterface::RELATIVE_PATH);
    
    // 创建重定向响应,用默认的302状态码就行
    return new RedirectResponse($targetUrl);
}

方法二:用控制器的快捷方法更省心

Symfony控制器自带了redirectToRoute方法,直接帮你搞定URL生成和响应创建,完全不用操心参数顺序:

use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

public function yourControllerMethod()
{
    return $this->redirectToRoute('persons', [], UrlGeneratorInterface::RELATIVE_PATH);
}

如果'persons'是直接的路径(不是路由名)

那只要修正参数顺序就行,比如:

// 默认302重定向,空响应头
return new RedirectResponse('persons');
// 要是需要指定状态码和响应头,这么写:
return new RedirectResponse('persons', 301, ['X-Custom-Header' => 'some-value']);

内容的提问来源于stack exchange,提问作者Braian Mellor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:07:53