【问题标题】:Symfony Entity Manager CallSymfony 实体管理器调用
【发布时间】:2018-09-15 12:36:57
【问题描述】:

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

$this->getDoctrine()->getManager()

还有:

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

性能? 更正确?

提前非常感谢, 卡尔·德夫

【问题讨论】:

    标签: php symfony doctrine entitymanager symfony3.x


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我认为两者的性能水平相同,但它们是否正确?我想不,Symfony 有一个漂亮的功能叫做“依赖注入”(https://symfony.com/doc/current/components/dependency_injection.html),你从来没有直接调用过服务,为什么?因为很难测试,例如:

          public function test()
      {
           $manager = $this->getDoctrine()->getManager();
           $manager->persist(new MyClass());
           $manager->flush();
      }
      

      如果你想测试这个调用那个方法,你必须有一个 Manager 指向某个地方,所以你的测试依赖于基础设施。

      现在,想象一下:

      public function test(EntityManager $manager)
          {
               $manager->persist(new MyClass());
               $manager->flush();
          }
      

      您可以模拟该实体管理器或实现一个 onMemoryEntityManager 删除该依赖项。

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

      https://en.wikipedia.org/wiki/Dependency_injectionhttps://symfony.com/doc/3.3/components/dependency_injection.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-13
        • 2015-10-30
        • 1970-01-01
        • 2016-01-02
        相关资源
        最近更新 更多