Symfony2:在一个通用的PHP类中获取Doctrine

时间:2012-08-10 17:21:51

标签: php symfony doctrine

在Symfony2项目中,当您使用 Controller 时,可以通过调用getDoctrine()上的this来访问 Doctrine ,即:

$this->getDoctrine();

通过这种方式,我可以访问这种Doctrine Entity的存储库。

假设在Symfony2项目中有一个通用的PHP类。如何检索 Doctrine ? 我想有这样的服务可以得到它,但我不知道是哪一个。

2 个答案:

答案 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的回答是完全正确的,我只是想将这个难题添加到这个帖子中。