Я пытаюсь расширить класс, но у меня есть эта проблема:
(1) Мне нужно выполнить простой запрос к базе данных, но если я передам в @ doctrine.orm.entity_manager в services.yml, то мне нужно передать нагрузку других значений и вызвать parent :: __ construct (для родительского класса) и я просто не могу заставить его работать (другой вопрос существует для этого, но не повезло).
(2) Если я не создаю __construct в моем новом расширенном классе, то он работает, но я не могу получить доступ к выполнению запроса БД.
Есть ли способ получить доступ к Доктрине, выполнить запрос, передать в @ doctrine.orm.entity_manager или что-то еще, чтобы я мог выполнить этот запрос без необходимости называть конструкцию _ в моем новом расширенном классе (и не пропускать все эти переменные, чтобы затем вызвать родительский :: _construct, который вызывает такую проблему).
Поскольку я пытался сделать это в течение 2 дней, тогда я возьму любой взлом, если придется (желательно не слишком много взлома, но мне может понадобиться, если я не смогу сделать это в ближайшее время). На сегодняшний день я никогда не прибегал к взлому Symfony2, поэтому для меня это не является обычным явлением. Благодарю.
Вы можете использовать инъекцию setter, если вы не хотите вводить аргументы в конструктор.
Конфигурация сервиса
my_service: class: YourClass calls: - [setEntityManager, ["@doctrine.orm.entity_manager"]]
Твой класс
use Doctrine\Common\Persistence\ObjectManager; // ... protected $em; public function setEntityManager(ObjectManager $em) { $this->em = $em; } public function someOtherFunction() { $this->em->getRepository('...') }
Вы хотите взломать? Ну вот:
$kernel = $GLOBALS['kernel']; $em = $kernel->getContainer()->get('doctrine.orm.entity_manager'); die(get_class($em));