Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony实体管理器呼叫_Php_Symfony_Doctrine_Entitymanager_Symfony3.x - Fatal编程技术网

Php Symfony实体管理器呼叫

Php Symfony实体管理器呼叫,php,symfony,doctrine,entitymanager,symfony3.x,Php,Symfony,Doctrine,Entitymanager,Symfony3.x,我想知道在Symfony3控制器上调用实体管理器是否有任何区别: $this->getDoctrine()->getManager() 以及: 表演? 更正确 先谢谢你, Carl Dev第一种方法仅在扩展基本控制器时可用,以便可以在控制器中使用。这是第二种方法的捷径 例如,当您需要实体管理器作为类内的服务时,第二种方法很有用,并且是获取条令实体管理器的正确方法。第一种方法仅在扩展基本控制器时可用,因此通常可以在控制器中使用。这是第二种方法的捷径 例如,当您需要实体管理器作为类内的

我想知道在Symfony3控制器上调用实体管理器是否有任何区别:

$this->getDoctrine()->getManager()
以及:

表演? 更正确

先谢谢你,
Carl Dev

第一种方法仅在扩展基本控制器时可用,以便可以在控制器中使用。这是第二种方法的捷径


例如,当您需要实体管理器作为类内的服务时,第二种方法很有用,并且是获取条令实体管理器的正确方法。

第一种方法仅在扩展基本控制器时可用,因此通常可以在控制器中使用。这是第二种方法的捷径


例如,当您需要实体管理器作为类内的服务时,第二种方法很有用,并且是获得条令实体管理器的正确方法。

我认为两者在性能级别上是相同的,但它们是否正确?我认为没有,Symfony有一个漂亮的特性叫做“依赖注入”(dependency injection),你从来没有直接调用过服务,为什么?因为很难测试,例如:

    public function test()
{
     $manager = $this->getDoctrine()->getManager();
     $manager->persist(new MyClass());
     $manager->flush();
}
如果您想测试这个调用那个方法,您必须有一个指向某个地方的管理器,所以您的测试取决于基础结构

现在,想象一下:

public function test(EntityManager $manager)
    {
         $manager->persist(new MyClass());
         $manager->flush();
    }
您可以模拟该实体管理器或实现onMemoryEntityManager来删除该依赖项

这背后有很多理论,我建议读一读:


我认为两者在性能水平上是相同的,但这些是正确的吗?我认为没有,Symfony有一个漂亮的特性叫做“依赖注入”(dependency injection),你从来没有直接调用过服务,为什么?因为很难测试,例如:

    public function test()
{
     $manager = $this->getDoctrine()->getManager();
     $manager->persist(new MyClass());
     $manager->flush();
}
如果您想测试这个调用那个方法,您必须有一个指向某个地方的管理器,所以您的测试取决于基础结构

现在,想象一下:

public function test(EntityManager $manager)
    {
         $manager->persist(new MyClass());
         $manager->flush();
    }
您可以模拟该实体管理器或实现onMemoryEntityManager来删除该依赖项

这背后有很多理论,我建议读一读: