2012-03-22 28 views
6

Necesitaba mover mi modelo desde el método del controlador, así que recibí ayuda para cambiarlo a un servicio. El servicio en sí mismo funciona, pero necesito poder conectarme a la doctrina y al kernel desde el interior de este servicio. Al principio intenté habilitar la doctrina, pero eso creó problemas. ¿Cómo puedo hacer que esto funcione? Seguí los documentos y obtuve este código. No tengo idea de por qué recibí el error a continuación. De forma anticipada, muchas gracias por su ayuda.Servicio DependencyInjection en Symfony2

Mi config es:

CSVImport.php

namespace Tools\TFIBundle\Model; 

use Doctrine\ORM\EntityManager; 

class CSVImport { 
    protected $em; 

    public function __construct(EntityManager $em) { 
     $this->em = $em; 
    } 

app/config/config.yml

services: 
    csvimport: 
     class: Tools\TFIBundle\Model\CSVImport 
     arguments: [ @doctrine.orm.entity_manager ] 

acción en el controlador

$cvsimport = $this->get('csvimport'); 

MI ERROR

Catchable Fatal Error: Argument 1 passed to 
Tools\TFIBundle\Model\CSVImport::__construct() must be an instance of 
Doctrine\ORM\EntityManager, none given, called in 
.../Tools/TFIBundle/Controller/DefaultController.php on line 58 and defined in 
.../Tools/TFIBundle/Model/CSVImport.php line 12 

EDITAR, mi código de trabajo:

código de clase de servicio con el núcleo unido a ella

namespace Tools\TFIBundle\Model; 

use Doctrine\ORM\EntityManager, 
    AppKernel; 

class CSVImport { 
    protected $em; 
    protected $kernel; 
    protected $cacheDir; 

    public function __construct(EntityManager $em, AppKernel $k) { 
     $this->em = $em; 
     $this->kernel = $k; 
} 

Respuesta

1

Trate inyectar @doctrine.orm.default_entity_manager.

+0

esta pista me ayudó a encontrar un problema real, la configuración estaba bien, pero recibí un código de controlador de llamada incorrecta a ese servicio que cometió esos errores. – nysander

+0

Lo mismo funcionó para obtener la conexión DBAL. ¿Alguien puede explicar cuál es la lógica detrás de esto? – Robert

1

En la web he encontrado cómo conectarme a Doctrine DBAL para poder realizar consultas por mi cuenta. Pero cuando he cambiado la configuración de éste:

app/config.yml

services: 
    csvimport: 
     class: Tools\TFIBundle\Model\CSVImport 
     arguments: [ @doctrine.dbal.connection, @doctrine.orm.entity_manager, @kernel ] 

definición de clase

namespace Tools\TFIBundle\Model; 

use Doctrine\ORM\EntityManager, 
    Doctrine\DBAL\Connection, 
    AppKernel; 

class CSVImport { 
    protected $c; 
    protected $em; 
    protected $kernel; 

    public function __construct(Connection $c, EntityManager $em, AppKernel $k) { 
     $this->c = $c; 
     $this->em = $em; 
     $this->kernel = $k; 
    } 

i ha obtenido un error:

RuntimeException: The definition "csvimport" has a reference to an abstract definition "doctrine.dbal.connection". Abstract definitions cannot be the target of references. 

¿Algunas ideas?

Cuestiones relacionadas