4

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

$this->getDoctrine();

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

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

4

2 回答 2

11

您可以将此类注册为服务并将任何其他服务注入其中。假设你有 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它会列出所有可用服务及其别名和类。

于 2012-08-10T17:29:54.807 回答
1

检查 symfony2 文档后,我想出了如何以自定义方法传递您的服务以打破默认行为。

像这样重写你的配置:

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

因此,该服务现在可以通过您的其他方法使用。

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

Ondrej 的回答是绝对正确的,我只是想把这块拼图添加到这个线程中。

于 2013-11-02T01:07:33.217 回答