container doctrine symfony

Symfony2 usa Doctrine en Service Container



symfony access container (7)

Para Symfony 3.x

La solución más sencilla para mí fue simplemente activar autoconexión / autoconfiguración, y luego inyectar el servicio que necesitaba a través del constructor. Tenga en cuenta que también he permitido que cualquier controlador se inyecte como un servicio al establecer el resource: ''../../src/AppBundle/*''

#services.yml or config.yml services: _defaults: autowire: true autoconfigure: true public: false # Allow any controller to be used as a service AppBundle/: resource: ''../../src/AppBundle/*'' # you can exclude directories or files # but if a service is unused, it''s removed anyway exclude: ''../../src/AppBundle/{Entity,Repository,Tests,DataFixtures,Form}''

Luego, en cualquier servicio, puede inyectar y usar el gestor de entidades $em (o cualquier otro servicio / controlador ) a través del constructor de esta manera:

// class xyz private $em; // constructor public function __construct(/Doctrine/ORM/EntityManager $em) { $this->em = $em; } public function bar() { //Do the Database stuff $query = $this->em->createQueryBuilder(); //Your Query goes here $result = $query->getResult(); }

¿Cómo uso Doctrine en un contenedor de servicio?

El código solo causa un mensaje de error "Error fatal: llamada al método indefinido ... :: get ()".

<?php namespace .../Service; use Doctrine/ORM/EntityManager; use .../Entity/Header; class dsdsf { protected $em; public function __construct(EntityManager $em) { $this->em = $em; } public function create() { $id = 10; $em = $this->get(''doctrine'')->getEntityManager(); $em->getRepository(''...'')->find($id); } }

services.yml

service: site: class: .../Service/Site


De acuerdo con su código, ya tiene un EntityManager inyectado. No necesita llamar $em = $this->get(''doctrine'')->getEntityManager() - solo use $this->em .

Si no se inyecta un EntityManager , lea this .

ACTUALIZAR:

EntityManager hacer que el contenedor EntityManager un EntityManager en su servicio. Aquí hay un ejemplo de hacerlo en config.yml :

services: your.service: class: YourVendor/YourBundle/Service/YourService arguments: [ @doctrine.orm.entity_manager ]

Prefiero define los servicios de bundles en sus propios archivos services.yml , pero eso es un poco más avanzado, por lo que usar config.yml es lo suficientemente bueno para comenzar.


Estoy usando Symfony 3.4. Si desea crear un servicio en un paquete, esto funciona para mí:

services: Vendor/YourBundle/Service/YourService: arguments: $em: ''@doctrine.orm.entity_manager''

En su Service.php

<?php namespace Hannoma/ElternsprechtagBundle/Service; use Doctrine/ORM/EntityManager; use Hannoma/ElternsprechtagBundle/Entity/Time; class TimeManager { protected $em; public function __construct(EntityManager $em) { $this->em = $em; } }


Para acceder fácilmente a Entitymanager, use el siguiente:

//services.yml your service here: class: yourclasshere arguments: [@doctrine.orm.entity_manager]

Y en la clase en sí:

class foo { protected $em; public function __construct(/Doctrine/ORM/EntityManager $em) { $this->em = $em; } public function bar() { //Do the Database stuff $query = $this->em->createQueryBuilder(); //Your Query goes here $result = $query->getResult(); } }

Esta es mi primera respuesta, así que cualquier comentario es apreciado :)


Por favor prueba este código:

$em=$this->container->get(''doctrine'')->getEntityManager(); $rolescheduels=$em->getRepository(''OCSOCSBundle:RoleScheduel'')->findByUser($user->getId());


para cualquiera que trabaje con symfony3: necesitas hacer lo siguiente dentro de config / services.yml para usar doctrine en Service Container:

servicename_manager: class: AppBundle/Services/MyServiceClass arguments: [ "@doctrine.orm.entity_manager" ]


Desde 2017 y Symfony 3.3 puede registrar Repository como servicio , con todas sus ventajas.

Tu código cambiaría así.

1. Configuración del servicio

# app/config/services.yml services: _defaults: autowire: true .../Service/: resource: .../Service

2. Crear nueva clase - repositorio personalizado :

use Doctrine/ORM/EntityManagerInterface; class YourRepository { private $repository; public function __construct(EntityManagerInterface $entityManager) { $this->repository = $entityManager->getRepository(YourEntity::class); } public function find($id) { return $this->repository->find($id); } }

3. Use en cualquier controlador o servicio como este

class dsdsf { private $yourRepository; public function __construct(YourRepository $yourRepository) { $this->yourRepository = $yourRepository; } public function create() { $id = 10; $this->yourRepository->find($id); } }

¿Desea ver más códigos y listas de pros y contras?

Verifique mi publicación Cómo usar el repositorio con Doctrine como servicio en Symfony .