在 Symfony2 项目中,当您使用Controller时,您可以通过调用on访问Doctrine,即:getDoctrine()
this
$this->getDoctrine();
通过这种方式,我可以访问这样一个 Doctrine Entity 的存储库。
假设在 Symfony2 项目中有一个通用的 PHP 类。我怎样才能找回教义?我想有这样的服务可以得到它,但我不知道是哪一个。
您可以将此类注册为服务并将任何其他服务注入其中。假设你有 GenericClass.php 如下:
class GenericClass
{
public function __construct()
{
// some cool stuff
}
}
您可以将其注册为服务(Resources/config/service.yml|xml
通常在您的包中)并将 Doctrine 的实体管理器注入其中:
services:
my_mailer:
class: Path/To/GenericClass
arguments: [doctrine.orm.entity_manager]
它会尝试将实体管理器注入(默认情况下)的构造函数GenericClass
。所以你只需要为它添加参数:
public function __construct($entityManager)
{
// do something awesome with entity manager
}
如果您不确定应用程序的 DI 容器中有哪些服务可用,您可以使用命令行工具查找:php app/console container:debug
它会列出所有可用服务及其别名和类。
检查 symfony2 文档后,我想出了如何以自定义方法传递您的服务以打破默认行为。
像这样重写你的配置:
services:
my_mailer:
class: Path/To/GenericClass
calls:
- [anotherMethodName, [doctrine.orm.entity_manager]]
因此,该服务现在可以通过您的其他方法使用。
public function anotherMethodName($entityManager)
{
// your magic
}
Ondrej 的回答是绝对正确的,我只是想把这块拼图添加到这个线程中。