2011-04-27 11 views
6

Hay algunos artículos sobre los cuales tocar este tema, pero ninguno de ellos parecía ser una solución útil práctica para mí. Mi objetivo es poner algunos métodos básicos (los que necesito en cada controlador de todos modos) en un controlador de base, p.Cómo implementar una clase base para los controladores Symfony2

$this->getEntityManager(); 
    $this->getRequest(); 
    $this->getRepository($entityName); 

¿Cómo se puede hacer esto?

AFAIK tenemos que inyectar los servicios en el controlador base, pero ¿cómo digo a las clases que utilicen un servicio para su superclase? Hay algún artículo decente sobre los controladores y la inyección de dependencias [1], pero finalmente se quedó atascado con este enfoque también, ver a mi comentario aquí: [2]

[1] http://miller.limethinking.co.uk/2011/04/15/symfony2-controller-as-service/

[2] http://miller.limethinking.co.uk/2011/04/15/symfony2-controller-as-service/#comment-579

Respuesta

3

pseudocódigo

MyBaseController impliments Symfony\Component\Di\ContainerAwareInterface 
    setContainer($container) 
    $this->container = $container 

    getEntityManager 
    return $this->container->get('doctrine.orm.entity_manager') 
+0

Gracias por la pista. Cuando uso el controlador de base recibo el siguiente mensaje de error: "Error fatal: Declaración de ... Bundle \ Controller \ BaseController :: setContainer() debe ser compatible con la de Symfony \ Component \ DependencyInjection \ ContainerAwareInterface :: setContainer() en /Library/WebServer/Documents/...Bundle/Controller/BaseController.php en la línea 9 ". Setter ve así: 'setContainer función (\ Symfony \ Component \ DependencyInjection \ ContainerInterface $ contenedor) { \t \t $ this-> contenedor = $ contenedor; } ' – stoefln

+0

' $ container' puede ser nulo, por lo que debe ser '(... \ ContainerInterface $ container = null)' – Koc

+0

thanks- works great! – stoefln

Cuestiones relacionadas