Symfony4中SetlocaleController调用redirect方法未定义报错求助
解决Symfony 4中"Attempted to call an undefined method named 'redirect'"的问题
问题根源
redirect()是Symfony AbstractController类通过RedirectControllerTrait提供的快捷方法,你的SetlocaleController继承了HomeController,但如果HomeController没有继承AbstractController,或者你在构造函数中没有正确继承父类的初始化逻辑,就会导致找不到这个方法。
解决方案
这里有两种靠谱的解决方式,你可以根据自己的代码结构选择:
方式1:确保父类继承AbstractController
如果你的HomeController本身应该是一个Symfony标准控制器,修改它让它继承AbstractController:
namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; class HomeController extends AbstractController { // 这里保留HomeController原有的代码 }
同时,你的SetlocaleController的构造函数应该调用父类的构造方法(如果HomeController有自定义构造的话),避免覆盖父类的初始化逻辑:
public function __construct(\Twig\Environment $twig) { parent::__construct(); // 调用父类构造 $this->twig = $twig; }
方式2:直接使用RedirectResponse实例
既然你已经引入了Symfony\Component\HttpFoundation\RedirectResponse,可以跳过redirect()快捷方法,直接创建实例返回:
// 把原来的return $this->redirect($url);改成 return new RedirectResponse($url);
额外的代码问题修复
除了redirect的问题,你的代码还有两个小bug需要修正:
- 未初始化的
$session变量:你直接使用$session->set()但没有获取session实例,应该从Request对象中获取:$session = $request->getSession(); $session->set('_locale', $language); - 小写的
response类名:new response()应该改成new Response()(注意类名首字母大写)
内容的提问来源于stack exchange,提问作者Valc0d3r
相关产品推荐
相关产品推荐

