如何在Symfony2中的webtestcases中获取EntityManager

时间:2011-04-19 12:36:07

标签: dependency-injection symfony

我想知道如何在一个内部检索实体管理器 WebTestCase实例。

e.g。查看在testrun期间是否真的在DB中创建了一个实体。

有关于此的任何想法吗?

4 个答案:

答案 0 :(得分:30)

您可以通过内核检索DIC(依赖注入容器),内核是WebTestCase的受保护成员。

您可以在WebTestCase中执行此操作:

$em = $this->kernel->getContainer()->get('doctrine.orm.entity_manager');

<强>更新

根据您自己的评论,甚至还有一个快捷方式(因为您无论如何都会有客户):

$client = $this->getClient();
$container = $client->getContainer();

原样mentioned in the docs

答案 1 :(得分:6)

如果您拥有client,则可以从中获取实体经理

$em = $client->getContainer()->get('doctrine.orm.entity_manager');

不要使用`getEntityManager,自Symfony 2.1以来不推荐使用它。

享受:)

答案 2 :(得分:1)

情况已更改,我想添加一个对Symfony 4有效的更新。

如果您需要在测试中访问服务,则仍然需要先获取容器。可以这样完成:

$container = self::$container;

现在您可以获得服务,在此示例中为实体管理器

$this->em = $container->get('doctrine.orm.entity_manager');

我使用$this,假设该语句是用setUp方法编写的,而其他测试方法则需要该语句。

Symfony官方文档中的相关section

答案 3 :(得分:0)

$this->container->get('doctrine.orm.entity_manager');