Сервис DependencyInjection в Symfony2 - PullRequest
6 голосов
/ 22 марта 2012

Мне нужно было переместить мою модель из метода контроллера, поэтому я получил помощь, чтобы изменить ее на сервис. Сервис сам по себе работает, но мне нужно иметь возможность подключиться к доктрине и ядру изнутри этого сервиса. Сначала я пытался включить доктрину, но это создавало проблемы. Как я могу сделать эту работу? Я следовал за документами и получил этот код. Я понятия не имею, почему я получил ошибку ниже. Заранее благодарю за помощь.

Моя конфигурация:

CSVImport.php

namespace Tools\TFIBundle\Model;

use Doctrine\ORM\EntityManager;

class CSVImport  {
    protected $em;

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

приложение / Config / config.yml

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

действие в контроллере

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

МОЯ ОШИБКА

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

РЕДАКТИРОВАТЬ, мой рабочий код:

код класса обслуживания с прикрепленным к нему Ядром

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;
}

Ответы [ 2 ]

1 голос
/ 23 марта 2012

В Интернете я обнаружил, как подключиться к Doctrine DBAL, чтобы иметь возможность самостоятельно выполнять запросы.Но когда я изменил свою конфигурацию на эту:

app / config.yml

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

определение класса

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;
    }

Я получил ошибку:

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

Есть идеи?

1 голос
/ 22 марта 2012

Попробуйте ввести @doctrine.orm.default_entity_manager.

...