2013-08-01 4 views
0

Я пытаюсь расширить класс, но у меня есть эта проблема:Получить Учение или передать в службе без использования __construct - Symfony2

(1) Мне нужно провести простой запрос к базе данных, но если я прохожу в @ doctrine.orm.entity_manager в services.yml Затем мне нужно передать нагрузку других значений и вызвать parent :: __ construct (для родительского класса), и я просто не могу заставить его работать (для этого существует другой вопрос, но нет удачи).

(2) Если я не создаю __construct в своем новом расширенном классе, то он работает, но я не могу получить доступ для выполнения запроса БД.

Есть ли способ получить доступ к Доктрине, проводя запрос, передавая в @ doctrine.orm.entity_manager или что-то еще, поэтому я могу выполнить этот запрос, не называя конструкцию _ на моем новом расширенном классе (и не нужно передавать все эти переменные, чтобы затем вызвать родительский :: _construct, который вызывает такую ​​проблему).

Как я пытался это сделать в течение 2 дней, тогда я возьму любой хак, если потребуется (желательно не слишком много взлома, но мне может понадобиться, если я не смогу сделать это в ближайшее время). На сегодняшний день я никогда не прибегал к взлому Symfony2, поэтому для меня это не является обычным явлением. Благодарю.

ответ

4

Вы можете использовать setter injection, если вы не хотите вводить аргументы в конструктор.

Служба конфигурации

my_service: 
    class: YourClass 
    calls: 
     - [setEntityManager, ["@doctrine.orm.entity_manager"]] 

YourClass

use Doctrine\Common\Persistence\ObjectManager; 

// ... 

protected $em; 

public function setEntityManager(ObjectManager $em) 
{ 
    $this->em = $em; 
} 

public function someOtherFunction() 
{ 
    $this->em->getRepository('...') 
} 
+0

Perfect. Большое спасибо. Работа выполнена. – user2143356

4

Вы хотите взломать? Здесь вы найдете:

$kernel = $GLOBALS['kernel']; 
    $em = $kernel->getContainer()->get('doctrine.orm.entity_manager'); 
    die(get_class($em)); 
+0

Спасибо. К счастью, мне удалось использовать решение Nifr и заставить все работать, но это, безусловно, сделало бы меня. Без сомнения, я в конечном итоге буду использовать что-то подобное в будущем. Я проголосовал. Спасибо за помощь. – user2143356

+0

Рад видеть, что вы работали, не используя это. – Cerad

Смежные вопросы