在 Symfony2 项目中,当你使用控制器时,你可以通过在 this
上调用 getDoctrine()
来访问 Doctrine,即:
$this->getDoctrine();
通过这种方式,我可以访问这样一个教义实体的存储库。
假设在 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 的答案是绝对正确的,我只是想将这块拼图添加到这个线程中。