Symfony使用Doctrine报Registry对象不可调用错误求助
错误原因
你通过控制器方法参数注入的$doctrine是ManagerRegistry类型的实例对象(运行时实际为DoctrineBundle的Registry类实例),不是可调用的函数。你写$doctrine()属于把对象当函数调用,但该类没有实现__invoke魔术方法,不支持这种调用形式,因此触发「对象不可调用」的报错。
这类写法错误大多是受旧版本Symfony控制器自带的$this->getDoctrine()方法影响,混淆了注入对象和框架内置方法的调用形式,多写了括号。
修复方案
删除$doctrine后面多余的调用括号,直接以对象方法调用的形式访问getRepository()即可,修正后的完整控制器代码如下:
public function index(ManagerRegistry $doctrine): Response { $articles = $doctrine->getRepository(Article::class)->findAll(); return $this->render('blog/index.html.twig', [ 'controller_name' => 'BlogController', 'articles' => $articles, ]); }
内容的提问来源于stack exchange,提问作者user13906062
相关产品推荐
相关产品推荐

