मैंने अपनी स्वयं की सेवा बनाई है और मुझे डॉक्टिन एंटिटी मैनजर को इंजेक्ट करने की आवश्यकता है, लेकिन मुझे नहीं लगता कि __construct()
इसे मेरी सेवा में कहा जाता है, और इंजेक्शन भी काम करता है।
यहाँ कोड और विन्यास है:
<?php
namespace Test\CommonBundle\Services;
use Doctrine\ORM\EntityManager;
class UserService {
/**
*
* @var EntityManager
*/
protected $em;
public function __constructor(EntityManager $entityManager)
{
var_dump($entityManager);
exit(); // I've never saw it happen, looks like constructor never called
$this->em = $entityManager;
}
public function getUser($userId){
var_dump($this->em ); // outputs null
}
}
यहाँ services.yml
मेरे बंडल में है
services:
test.common.userservice:
class: Test\CommonBundle\Services\UserService
arguments:
entityManager: "@doctrine.orm.entity_manager"
मैंने config.yml
अपने ऐप्लिकेशन में .yml को उसी तरह आयात किया है
imports:
# a few lines skipped, not relevant here, i think
- { resource: "@TestCommonBundle/Resources/config/services.yml" }
और जब मैं नियंत्रक में सेवा को कॉल करता हूं
$userservice = $this->get('test.common.userservice');
$userservice->getUser(123);
मुझे एक ऑब्जेक्ट मिलता है (शून्य नहीं), लेकिन $this->em
उपयोगकर्ता सेवा में शून्य है, और जैसा कि मैंने पहले ही उल्लेख किया है, उपयोगकर्ता सेवा पर निर्माता को कभी नहीं बुलाया गया है
एक और बात, नियंत्रक और उपयोगकर्ता सेवा अलग-अलग बंडलों में हैं (मुझे परियोजना को व्यवस्थित रखने के लिए वास्तव में आवश्यकता है), लेकिन फिर भी: हर और ठीक काम करता है, मैं कॉल भी कर सकता हूं
$this->get('doctrine.orm.entity_manager')
उसी नियंत्रक में जिसका उपयोग मैं UserService पाने के लिए और वैध (शून्य नहीं) EntityManager ऑब्जेक्ट प्राप्त करने के लिए करता हूं।
इस तरह देखें कि मैं कॉन्फ़िगरेशन का टुकड़ा या उपयोगकर्ता सेवा और सिद्धांत विन्यास के बीच कुछ लिंक गायब कर रहा हूं।