2012-03-22 16 views
6

मुझे अपने मॉडल को नियंत्रक विधि से स्थानांतरित करने की आवश्यकता है, इसलिए मुझे इसे किसी सेवा में बदलने में मदद मिली। सेवा स्वयं ही काम करती है, लेकिन मुझे इस सेवा के अंदर से सिद्धांत और कर्नेल से जुड़ने में सक्षम होना चाहिए। सबसे पहले मैंने सिद्धांत को सक्षम करने की कोशिश की, लेकिन इससे समस्याएं पैदा हुईं। मै इसे काम मे कैसे ले सकता हूँ? मैंने दस्तावेज़ों का पालन किया है और यह कोड मिला है। मुझे नहीं पता कि मुझे नीचे त्रुटि क्यों मिली। आपकी सहायता के लिए अग्रिम रूप से धन्यवाद।Symfony2 में सेवा निर्भरता इंजेक्शन

मेरे config है:

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

उत्तर

1

@doctrine.orm.default_entity_manager इंजेक्शन लगाने की कोशिश करें।

+0

इस संकेत ने मुझे वास्तविक समस्या खोजने में मदद की, कॉन्फ़िगरेशन ठीक था, लेकिन मुझे उस सेवा में नियंत्रक कोड गलत कॉल मिला जो उन त्रुटियों को बना देता था। – nysander

+0

वही बात डीबीएएल कनेक्शन प्राप्त करने के लिए काम करती है। क्या कोई समझा सकता है कि इसके पीछे तर्क क्या है? – Robert

1

वेब पर मैंने पाया है कि डॉक्टरेट डीबीएएल से कैसे जुड़ें, ताकि मैं खुद से प्रश्न पूछ सकूं। लेकिन जब मैं इस एक के लिए मेरी विन्यास बदल दिया है:

एप्लिकेशन/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. 

कोई विचार?