Avevo bisogno di spostare il mio modello dal metodo del controller, quindi ho ricevuto aiuto per cambiarlo in un servizio. Il servizio funziona da solo, ma devo essere in grado di connettermi alla dottrina e al kernel dall'interno di questo servizio. All'inizio ho provato ad abilitare la dottrina, ma questo ha creato problemi. Come posso fare questo lavoro? Ho seguito i documenti e ho ottenuto questo codice. Non ho idea del motivo per cui ho ricevuto l'errore qui sotto. Grazie in anticipo per il tuo aiuto.Service DependencyInjection in Symfony2
La mia configurazione è:
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 ]
azione controller
$cvsimport = $this->get('csvimport');
mio errore
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
EDIT, il mio codice di lavoro:
Service codice di classe con Kernel attaccato ad esso
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;
}
questo suggerimento mi ha aiutato a trovare un problema reale, la configurazione era ok, ma ho ricevuto nel codice controller una chiamata errata a quel servizio che ha causato quegli errori. – nysander
La stessa cosa ha funzionato per ottenere una connessione DBAL. Qualcuno può spiegare qual è la logica dietro di esso? – Robert