在Symfony2项目中,当您使用 Controller 时,可以通过调用getDoctrine()
上的this
来访问 Doctrine ,即:
$this->getDoctrine();
通过这种方式,我可以访问这种Doctrine Entity的存储库。
假设在Symfony2项目中有一个通用的PHP类。如何检索 Doctrine ? 我想有这样的服务可以得到它,但我不知道是哪一个。
答案 0 :(得分:11)
您可以将此课程注册为service,并将其他任何服务注入其中。假设你有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
找到它,并列出所有可用服务及其别名和类。
答案 1 :(得分:1)
检查symfony2文档后,我想出了如何传递你的服务 在自定义方法中打破默认行为。
重写你的配置:
services:
my_mailer:
class: Path/To/GenericClass
calls:
- [anotherMethodName, [doctrine.orm.entity_manager]]
因此,现在可以使用其他方法提供服务。
public function anotherMethodName($entityManager)
{
// your magic
}
来自Ondrej的回答是完全正确的,我只是想将这个难题添加到这个帖子中。