Symfony __construct

156
14 ноября 2018, 16:10

Мне нужно реализовать статистику посещения на сайте, хотел в конструкторе всю логику прописать, но доктрину не получается вызвать из конструктора, пишет

Call to a member function has() on null
$visitRepo = $this->getDoctrine()->getRepository('App:VisitStatistics');

Можно ли вызвать констракт или как иначе? Ошибка

protected function getDoctrine(): ManagerRegistry    
{        
    if (!$this->container->has('doctrine')) {            
        throw new \LogicException('The DoctrineBundle is not registered in your application. Try running "composer require symfony/orm-pack".');       
    }        
    return $this->container->get('doctrine');    
}

Вызвать пытаюсь в конструкторе базового контроллера, который наследуется от Controller

Answer 1

Если вы используете четверку, то пора уже забыть про контейнер, а инжектить все что требуется. EntityManager насколько я помню имеет EntityManagerInterface, поэтому его надо заинжектить в конструктор:

public function __construct(EntityManagerInterface $em) 
{
    $this->repository = $em->getRepository('repoName');
}
Answer 2

Вызвать getDoctrine в конструкторе не выйдет, поскольку метод setContainer контроллера выполняется после конструктора и соответственно container равен null в момент создания объекта и вызов $this->container->has('doctrine') вызывает указанную вами ошибку

READ ALSO
Не могу вложить footer в div.wrapper

Не могу вложить footer в div.wrapper

У меня есть верстка и нужно её натянуть на вордпрессеВсё бы хорошо во только не получается вложить фоотер в div

162
ЧПУ (URL) для ссылок

ЧПУ (URL) для ссылок

У меня есть indexphp, login

150
Не приходит сообщение на почту

Не приходит сообщение на почту

На странице есть две формы, данные с которой должны отправляться на почту, которая на хостингеПри отправке выводиться что отправлено, но письма...

520
Крестики-нолики проверка по диагонали

Крестики-нолики проверка по диагонали

Как пофиксить функцию "checkDiagonals", чтобы она обрабатывала диагонали как на фото корректно и возвращала корректный результат?

440