Is there a way to inject EntityManager into a service

后端 未结 2 1662
迷失自我
迷失自我 2021-01-05 04:15

While using Symfony 3.3, I am declaring a service like this:

class TheService implements ContainerAwareInterface
{
    use ContainerAwareTrait;
         


        
相关标签:
2条回答
  • 2021-01-05 04:54

    Traditionally, you would have created a new service definition in your services.yml file set the entity manager as argument to your constructor

    app.the_service:
        class: AppBundle\Services\TheService
        arguments: ['@doctrine.orm.entity_manager']
    

    More recently, with the release of symfony 3.3, the default symfony-standard-edition changed their default services.yml file to default to using autowire and add all classes in the AppBundle to be services. This removes the need for adding the custom service and using a type hint in your constructor will automatically inject the right service.

    Your service class would then look like the following

    use Doctrine\ORM\EntityManagerInterface
    
    class TheService
    {
        private $em;
    
        public function __construct(EntityManagerInterface $em)
        {
            $this->em = $em;
        }
    
        // ...
    }
    

    For more information about automatically defining service dependencies, see https://symfony.com/doc/current/service_container/autowiring.html

    The new default services.yml configuration file is available here: https://github.com/symfony/symfony-standard/blob/3.3/app/config/services.yml

    0 讨论(0)
  • 2021-01-05 05:19

    Sometimes I inject the EM into a service on the container like this in services.yml:

     application.the.service:
          class: path\to\te\Service
          arguments:
            entityManager: '@doctrine.orm.entity_manager'
    

    And then on the service class get it on the __construct method. Hope it helps.

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