Symfony 5.4 及更高版本中 getDoctrine() 的新替代方案

Posted

技术标签:

【中文标题】Symfony 5.4 及更高版本中 getDoctrine() 的新替代方案【英文标题】:New alternative for getDoctrine() in Symfony 5.4 and up 【发布时间】:2022-01-17 18:33:30 【问题描述】:

正如我的 IDE 所指出的,AbstractController::getDoctrine() 方法现在已被弃用。

我在官方文档和 Github 更改日志中都没有找到任何关于此弃用的参考。

此快捷方式的新替代方案或解决方法是什么?

【问题讨论】:

【参考方案1】:

如上所述here:

不要使用那些快捷方式,而是在构造函数或控制器方法中注入相关服务。

你需要使用依赖注入。

对于给定的控制器,只需在控制器的构造函数中注入ManagerRegistry


use Doctrine\Persistence\ManagerRegistry;

class SomeController 

    public function __construct(private ManagerRegistry $doctrine) 

    public function someAction(Request $request) 
        // access Doctrine
        $this->doctrine;
    
 

【讨论】:

【参考方案2】:

您可以使用 EntityManagerInterface $entityManager:

public function delete(Request $request, Test $test, EntityManagerInterface $entityManager): Response

    if ($this->isCsrfTokenValid('delete'.$test->getId(), $request->request->get('_token'))) 
        $entityManager->remove($test);
        $entityManager->flush();
    

    return $this->redirectToRoute('test_index', [], Response::HTTP_SEE_OTHER);

【讨论】:

以上是关于Symfony 5.4 及更高版本中 getDoctrine() 的新替代方案的主要内容,如果未能解决你的问题,请参考以下文章

在 Symfony 2.8、3.0 及更高版本中将数据传递给 buildForm()

如何激活Pentaho CTools功能属性

为啥 SSMS 17.x 及更高版本不支持 SSIS

Android Api(Okhttps)未在android 9(pie)及更高版本中调用[重复]

在 API 15 及更高版本中使用 PreferenceActivity

Kafka 0.9 及更高版本中的 Zookeeper 故障