Foros del Web » Programando para Internet » PHP » Symfony »

Obtener el $this->getDoctrine() desde un clase propia

Estas en el tema de Obtener el $this->getDoctrine() desde un clase propia en el foro de Symfony en Foros del Web. Hola a todos: Tengo la siguiente estructura: Me he creado una clase propia llamada CActores: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código PHP: Ver original namespace cineastasBundle\Model ; use ...
  #1 (permalink)  
Antiguo 11/08/2016, 06:27
 
Fecha de Ingreso: junio-2007
Mensajes: 259
Antigüedad: 9 años, 7 meses
Puntos: 5
Obtener el $this->getDoctrine() desde un clase propia

Hola a todos:

Tengo la siguiente estructura:

Me he creado una clase propia llamada CActores:

Código PHP:
Ver original
  1. namespace cineastasBundle\Model;
  2. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  3. use cineastasBundle\Entity\Actores; // para trabajar con la BD
  4.  
  5. class CActores  {
  6.      
  7.     function __construct() {
  8.     }
  9.    
  10.     // *********************************
  11.     function addActor($arr) {
  12.         $actor = new Actores(); // creamos instancia
  13.         $actor->setNomActor($arr["nom_actor"]);
  14.         $actor->setAnnoOscar($arr["anno_oscar"]);
  15.         $actor->setTitPelicula($arr["tit_pelicula"]);
  16.         $actor->setDirPelicula($arr["dir_pelicula"]);
  17.        
  18.         $em = $this->getDoctrine()->getManager();
  19.         $em->persist($actor);
  20.         $em->flush();
  21.        
  22.     }
  23. }

Y lo llamo desde un controllador de la siguiente manera:

Código PHP:
Ver original
  1. public function insertarActorAction()  {
  2.         $CActores = new CActores();
  3.         $CActores->addActor($_POST);
  4.         return $this->redirect($this->generateUrl('cineastas_listadoActores'));
  5.     }

El error me da en la línea de:
Código PHP:
Ver original
  1. $em = $this->getDoctrine()->getManager();

¿Cómo puedo desde una clase propia obtener el getDoctrine? He visto varias soluciones buscando en google (como modificar el service.yml o heredar controlladores) pero ninguna me ha funcionado.

¿Qué debería poner para obtenerlo en mi clase? Debe ser algo sencillo pero todo lo que he probado me ha fallado.

Muchas gracias por adelantado
  #2 (permalink)  
Antiguo 11/08/2016, 09:10
Avatar de hhs
hhs
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.718
Antigüedad: 3 años, 6 meses
Puntos: 323
Respuesta: Obtener el $this->getDoctrine() desde un clase propia

Puedes explicar que es lo que quieres hacer?
__________________
Saludos
A class should have only one reason to change.
Laraveles
  #3 (permalink)  
Antiguo 11/08/2016, 09:23
 
Fecha de Ingreso: junio-2007
Mensajes: 259
Antigüedad: 9 años, 7 meses
Puntos: 5
Respuesta: Obtener el $this->getDoctrine() desde un clase propia

Pues lo que pretendo es realizar todas las operaciones que se hagan en la BD en las clases que me vaya creando (y no desde los controllers), por eso quiero que desde la clase CActores pueda acceder al getDoctrine.

Podría pasarle desde el controller el $em correspondiente, algo así como:

Código PHP:
Ver original
  1. public function insertarActorAction()  {
  2.             $em = $this->getDoctrine()->getManager();
  3.             $CActores = new CActores();
  4.             $CActores->addActor($em, $_POST);
  5.             return $this->redirect($this->generateUrl('cineastas_listadoActores'));
  6.         }

Y así funcionaría sin problemas pero me parece una forma cutre de hacerlo. Tiene que haber alguna manera para que desde la clase de CActores obtener el getDoctrine.

Gracias.
  #4 (permalink)  
Antiguo 11/08/2016, 13:58
Avatar de hhs
hhs
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.718
Antigüedad: 3 años, 6 meses
Puntos: 323
Respuesta: Obtener el $this->getDoctrine() desde un clase propia

Si no estas familiarizado con el Framework primero comienza usando los principios básicos, cuando quede funcionando entonces evaluas si tu clase puede ser un servicio e inyectarle a ese servicio el EntityManager
Código PHP:
Ver original
  1. class CActores  {
  2.  
  3.    private $entityManager;
  4.      
  5.     function __construct(EntityManager $entityManager) {
  6.          $this->entityManager = $entityManager;
  7.     }
  8.    
  9.     // *********************************
  10.     function addActor($arr) {
  11.         $actor = new Actores(); // creamos instancia
  12.         $actor->setNomActor($arr["nom_actor"]);
  13.         $actor->setAnnoOscar($arr["anno_oscar"]);
  14.         $actor->setTitPelicula($arr["tit_pelicula"]);
  15.         $actor->setDirPelicula($arr["dir_pelicula"]);
  16.        
  17.         $this->entityManager->persist($actor);
  18.         $this->entityManager->flush();
  19.        
  20.     }
Controller
Código PHP:
Ver original
  1. public function insertarActorAction()  {
  2.             $em = $this->getDoctrine()->getManager();
  3.             $CActores = new CActores($em);
  4.             $CActores->addActor($em, $_POST);
  5.             return $this->redirect($this->generateUrl('cineastas_listadoActores'));
  6.         }
__________________
Saludos
A class should have only one reason to change.
Laraveles



La zona horaria es GMT -6. Ahora son las 19:34.