Задать вопрос
chazovs
@chazovs
Корпорация Центр

Почему в Symfony я getDoctrine()->getManager() возвращает «Call to a member function has() on null»?

Есть класс ConfigManager, который лежит в src/Services/ConfigManager.php и наследует AbstractController
В конструкторе этого класса я пытаюсь сделать следующее
$this->entityManager = $this->getDoctrine()->getManager();

на что получаю
Call to a member function has() on null

Вот trace:
Error:
Call to a member function has() on null
  at vendor/symfony/framework-bundle/Controller/AbstractController.php:345
  at Symfony\Bundle\FrameworkBundle\Controller\AbstractController->getDoctrine()
     (src/Services/ConfigManager.php:39)
  at App\Services\ConfigManager->__construct(object(Logger))
     (src/Services/сrmAPI.php:33)
  at App\Services\сrmAPI->__construct()
     (src/Services/FormHandler.php:24)
  at App\Services\FormHandler->registerModuleHandler(array(), object(Logger))
     (src/Controller/FormsController.php:33)
  at App\Controller\FormsController->index(object(Request))
     (vendor/symfony/http-kernel/HttpKernel.php:157)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
     (vendor/symfony/http-kernel/HttpKernel.php:79)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
     (vendor/symfony/http-kernel/Kernel.php:196)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (public/index.php:28)


Я неделю назад познакомился с симфой поэтому, если можно, объясните подробно: что я неправильно делаю.
Я понял, что у меня нет какого-то контейнера.. но откуда мне его взять и как это работает?
  • Вопрос задан
  • 906 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
BlackBride
@BlackBride
Web developer
В файле config/services.yaml видно, что контроллеры из папки src/Controllers подключаются отдельно, что позволяет им получить все аргументы автоматически.

В вашем случае вы создаете сервис, но наследуете класс контроллера (но нельзя так просто взять...) Если вы хотите в своем сервисе просто получить доступ к entityManager, нужно убрать AbstractController, и прописать:

public function __construct(EntityManagerInterface $entityManager)
    {
        $this->entityManager = $entityManager;
    }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы