6

我需要将我的模型从控制器方法中移出,因此我得到了帮助将其更改为服务。该服务本身可以工作,但我需要能够从该服务内部连接到学说和内核。起初我试图启用教义,但这会产生问题。我怎样才能使这项工作?我已关注文档并获得了此代码。我不知道为什么我得到下面的错误。提前谢谢你的帮助。

我的配置是:

CSVImport.php

namespace Tools\TFIBundle\Model;

use Doctrine\ORM\EntityManager;

class CSVImport  {
    protected $em;

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

应用程序/配置/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;
}
4

2 回答 2

1

尝试注入@doctrine.orm.default_entity_manager

于 2012-03-22T14:26:52.427 回答
0

在网络上,我发现了如何连接到 Doctrine DBAL 以便能够自己进行查询。但是当我将配置更改为这个时:

应用程序/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.

有任何想法吗?

于 2012-03-23T12:27:26.997 回答