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()
Android Api(Okhttps)未在android 9(pie)及更高版本中调用[重复]