Symfony2的:在一个通用的PHP类获得主义(Symfony2: get Doctrine in

2019-06-26 23:10发布

在Symfony2中的项目,当你使用一个控制器 ,可以通过调用访问主义 getDoctrine()this ,即:

$this->getDoctrine();

这样一来,我可以访问这种学说实体的存储库。

假设有一个通用的PHP类在Symfony2的项目。 我怎样才能找回主义 ? 我想,有这样的服务来获得它,但我不知道是哪一个。

Answer 1:

你可以注册这个类作为一个服务和任何其他服务注入到它。 假设你有GenericClass.php如下:

class GenericClass
{
    public function __construct()
    {
        // some cool stuff
    }
}

你可以为它服务注册(在你的包的Resources/config/service.yml|xml通常情况下),并注入主义的实体管理器进去:

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 ,它会用它们的别名和课程列出所有可用的服务。



Answer 2:

检查Symfony2的文档后,我想通了,如何通过你的服务在自定义的方法来打破默认行为。

重写你的configs是这样的:

services:
my_mailer:
    class: Path/To/GenericClass
    calls:
         - [anotherMethodName, [doctrine.orm.entity_manager]]

因此,该服务现已在你的其他方法可用。

public function anotherMethodName($entityManager)
{
    // your magic
}

从的Ondrej答案是绝对正确的,我只是想这一块拼图添加到该线程。



文章来源: Symfony2: get Doctrine in a generic PHP class