2012-10-06 21 views
25

¿Cómo puedo obtener un administrador de entidades desde el interior de un controlador con las últimas Symfony y Doctrine?Cómo obtener el administrador de entidades para la entidad Doctrine con Symfony 2.1 desde el controlador

La forma descrita en "El libro" se marcó como obsoleta ahora. ¿Cuál es una forma moderna (correcta) de hacer esto?

public function someAction() 
{ 
    // getEntityManager() from Doctrine\Bundle\DoctrineBundle\Registry is deprecated 
    $entityManager = $this->getDoctrine()->getEntityManager(); 
    ... 
} 
+0

En realidad, no conocía el método obsoleto hasta hace poco, se notó como una advertencia en la página de depuración symfony2, y también me dijo cuál es el nuevo método que debo usar. Así que supongo que la mayoría de las veces encontrará la respuesta en la página de depuración. –

Respuesta

45

Use $this->getDoctrine()->getManager() en su lugar.

En realidad, es mejor no hacer que los controladores conozcan la capa de persistencia que está utilizando. Esas cosas se deben mover al Service Layer para abstraer la forma en que persisten los datos.

+0

Sí, claro. Gracias) –

+1

¿Qué quieres decir? ¿Deberían moverse todos los métodos relacionados con la base de datos a la capa de servicio? ¿Cuál es el beneficio? El EntityManager ya está en la capa de servicio (supongo). ¿O estoy malentendiendo algo? ¿Puede dar un ejemplo? –

+0

@Elnur He visto declaraciones similares como "No deberías hacer eso en tu controlador" por todas partes, pero todas las respuestas no explican por qué. Sé que los controladores son específicos del framework y, al persistir los datos en su controlador, su código no es tan portátil como podría ser, pero no he visto un ejemplo concreto de eso. – ILikeTacos

Cuestiones relacionadas