我正在尝试扩展课程,但我遇到了这个问题:
(1)我需要进行一个简单的数据库查询,但是如果我在services.yml中传入@ doctrine.orm.entity_manager,那么我需要传递一些其他值并调用parent :: __ construct(对于父类)我只是不能让它工作(存在另一个问题,但没有运气)。
(2)如果我没有在我的新扩展类中创建__construct,那么它可以工作,但我无法访问进行数据库查询。
是否有办法访问Doctrine,进行查询,传入@ doctrine.orm.entity_manager或其他任何内容,以便我可以执行此查询而无需在我的新扩展类上调用_ 构造(并避免必须传入所有这些变量然后调用导致此类问题的parent :: _construct。)
因为我一直试图这样做2天然后我会采取任何黑客,如果我必须(最好不是太多的黑客,但我可能需要,如果我不能很快这样做)。到目前为止,我从来没有使用过Symfony2,所以这对我来说并不常见。感谢。
答案 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));