Crear un controlador base en Symfony3

Hoy vamos a ver como crear un controlador base en Symfony3 para las tareas de sesiones, conseguir el entity manager, entre otras cosas y de esta forma evitar la repetición de algunos bloques de código.

Para crear este controlador base en Symfony3, crearemos un fichero Base.php dentro la carpeta de controladores de nuestro Bundle.

<?php
namespace AppBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Session\Session;

class Base extends Controller
{
  protected $_session;
  protected $_em;
  
  public function getManager()
  {
    if ( !$this->_em )
      $this->_em      =  $this->getDoctrine()->getManager();
    return $this->_em;
  }
  public function getSession()
  {
    if ( !$this->_session )
      $this->_session  =  new Session();
    return $this->_session;
  }
}

De este modo, tenemos toda la parte de obtener el entity manager y sesiones centralizados en una sola clase y podemos utilizar los métodos en cualquier controlador que extienda a esta clase con $this->getSession() y $this->getManager()

En los controladores sólo sería necesario heredar de esta clase añadiendo use AppBundle\Controller\Base; y en lugar de extender de Controller extendemos de Base, de esta forma:

  use AppBundle\Controller\Base;
  ...
  class PruebasController extends Base{
  ...
     public function indexAction()
     {
       $em  =  $this->getManager();
     }
   }

Con esto ya tenemos nuestro controlador base en Symfony3 preparado para usarlo, como ves es algo muy sencillo que nos puede ahorrar alguna linea de código, incluso podríamos implementar más métodos para automatizar la carga de repositorios o lo que se nos pase por la cabeza.

Víctor Robles WEB

Autor: Victor

Desarrollador web - Formador online - Blogger

Compartir este post