Doctrine 2 with Symfony DI Container

后端 未结 2 1013
长发绾君心
长发绾君心 2021-01-15 17:25

I am working on a Zend Framework project that leverages Doctrine 2. I\'m trying to get Symfony\'s DI container working with the project as well, but I\'m having trouble. Sup

相关标签:
2条回答
  • 2021-01-15 17:48

    A Doctrine Entity is a newable, not an injectable. Entities are not supposed to be created through a DIC. See this following blog post on the difference between newable and injectable:

    http://misko.hevery.com/2008/09/30/to-new-or-not-to-new/

    0 讨论(0)
  • 2021-01-15 18:04

    Its a bit tricky, but it can be done. There exists a patch for symfony di container which allows you to pass a already existing object to the container builder instance and let the di container configure it for you (e. g. inject dependencies based on interfaces). The patch is implemented in this repository on github: https://github.com/lstrojny/symfony but didn´t make it upstream to symfony master repository.

    You use it like this:

    $user = new User();
    $container->configure('someId', $user);
    

    Then you could register a PostLoad event handler with Doctrine´s EventManager (see here for more details: http://www.doctrine-project.org/docs/orm/2.0/en/reference/events.html ). In this event handler you configure the loaded entity via the aforementioned method. It´s obvious but you cant use constructor injection in this case, only setter.

    This is a bit tricky to set up, but can be very powerful especially in conjunction with the ability of symfony di container to inject dependencies based on interfaces.

    0 讨论(0)
提交回复
热议问题