Symfony 6在没有控制器的情况下获取对象



在以前版本的symfony中,您可以获取这样的对象`


public function someMethod()
{
$method = $this->getDoctrine()->getRepository(Method::class)->findOneBy(array('id' => 1));

return $method;
}

`这很容易,因为这意味着你可以很容易地在twig.yaml文件中创建全局变量,并在你的页面周围拥有动态内容。

现在,据我所知,在symfony中,ManagerRegistry的一个参数必须始终作为一个参数传递。我是不是太狭隘了,还是有办法解决这个问题?

我试着扩展类并以这种方式传递它,但它给了我同样的解决方法错误。

在控制器中,您可以执行以下操作之一:

class MyController extends AbstractController {

private EntityManagerInterface $em;
public function __construct(EntityManagerInterface $em) {
$this->em = $em;
}
}

class MyController extends AbstractController {
{ ... }
public function someMethod(EntityManagerInterface $em) {
$em->getRepository(SomeClass::class)
}
}

我举了一个控制器为例,但你可以在你的服务中做到这一点。如果使用多实体管理器,则可以使用扩展AbstractManagerRegistry的ManagerRegistry,并使用方法getManager($name)

没有真正的解决方法,因为你总是需要注入它。根据你想要实现的目标,可能有一些解决方案可以帮助你。

您也可以直接注入存储库:

public function someMethod(EntityRepository $repository) {
$entities = $repository->findAll();
}

当然,你也可以把它注入结构中:

class MyController extends AbstractController {

private EntityRepository $repository;
public function __construct(EntityRepository $repository) {
$this->repository = $repository;
}
}

如果你在php8上,你可以写:

class MyController extends AbstractController {

public function __construct(private EntityRepository $repository) {}
}

最新更新