0

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

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

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

有没有办法访问 Doctrine,进行查询,传入 @doctrine.orm.entity_manager 或任何东西,这样我就可以进行这个查询,而不必在我的新扩展类上调用 _ 构造(并且避免必须传入所有这些变量然后调用导致此类问题的 parent:: _construct)。

因为我已经尝试这样做了 2 天,所以如果必须的话,我会采取任何 hack(最好不要太多的 hack,但如果我不能很快做到这一点,我可能需要这样做)。迄今为止,我从未使用过 Symfony2 的破解,所以这对我来说并不常见。谢谢。

4

2 回答 2

4

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

服务配置

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

你的班

use Doctrine\Common\Persistence\ObjectManager;

// ...

protected $em;

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

public function someOtherFunction()
{
    $this->em->getRepository('...')
}
于 2013-08-01T15:41:14.993 回答
4

你想要一个黑客?干得好:

    $kernel = $GLOBALS['kernel'];
    $em = $kernel->getContainer()->get('doctrine.orm.entity_manager');
    die(get_class($em));
于 2013-08-01T16:26:19.963 回答