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
相关产品推荐
相关产品推荐

