在不使用__construct的情况下获取Doctrine或传递服务 - Symfony2

时间:2013-08-01 15:35:11

标签: php symfony doctrine-orm doctrine

我正在尝试扩展课程,但我遇到了这个问题:

(1)我需要进行一个简单的数据库查询,但是如果我在services.yml中传入@ doctrine.orm.entity_manager,那么我需要传递一些其他值并调用parent :: __ construct(对于父类)我只是不能让它工作(存在另一个问题,但没有运气)。

(2)如果我没有在我的新扩展类中创建__construct,那么它可以工作,但我无法访问进行数据库查询。

是否有办法访问Doctrine,进行查询,传入@ doctrine.orm.entity_manager或其他任何内容,以便我可以执行此查询而无需在我的新扩展类上调用_ 构造(并避免必须传入所有这些变量然后调用导致此类问题的parent :: _construct。)

因为我一直试图这样做2天然后我会采取任何黑客,如果我必须(最好不是太多的黑客,但我可能需要,如果我不能很快这样做)。到目前为止,我从来没有使用过Symfony2,所以这对我来说并不常见。感谢。

2 个答案:

答案 0 :(得分:4)

如果您不想将参数注入构造函数,可以使用setter injection

服务配置

 my_service:
     class: YourClass
     calls:
         - [setEntityManager, ["@doctrine.orm.entity_manager"]]

<强> YourClass

use Doctrine\Common\Persistence\ObjectManager;

// ...

protected $em;

public function setEntityManager(ObjectManager $em)
{
   $this->em = $em;
}

public function someOtherFunction()
{
    $this->em->getRepository('...')
}

答案 1 :(得分:4)

你想要一个黑客?你走了:

    $kernel = $GLOBALS['kernel'];
    $em = $kernel->getContainer()->get('doctrine.orm.entity_manager');
    die(get_class($em));