Вопрос по symfony – «Вызов функции-члена имеет () для необъекта» из Symfony 2 Controller

7

Я получаю ошибку

Fatal error: Call to a member function has() on a non-object in /labs/Projects/What2Do/vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php on line 161

Я не совсем уверен, как отладить это. Ошибка в файле Symfony 2, а не в моем ... мой контроллер выглядит так, как показано ниже. Я бегуindexAction

<?php
class ProjectsController extends Controller {

    /**
     * @var EntityManager 
     */
    protected $em;

    public function __construct() {
        $this->em = $this->getDoctrine()->getEntityManager();
    }

    /**
     * @Route("/")
     * @Route("/projects", name="listProjects")
     * @Template()
     */
    public function indexAction() {
        $projects = $this->em->getRepository(Project::NAME)->findAll();

        return array('projects' => $projects);
    }

    /**
     * @Route("/projects/{projId}", name="viewProject") 
     * @Template()
     */
    public function viewAction($projId) {
        // retrieve project
        $proj = $this->em->getRepository(Project::NAME)->findOneById($projId);
        if ($proj == null)
            throw $this->createNotFoundException ('Invalid project');

        return array('proj' => $proj);
    }
}
Какая линия 161? Можете ли вы выделить это? Clement Herreman

Ваш Ответ

1   ответ
13

Контроллер Symfony 2 не имеет метода __construct, поэтому вызов родительских конструкторов не является плохой идеей, он не поможет.

Проблема заключается в том, что контейнер вводится после __construct, поэтому попытка получить ваш менеджер сущностей doctrine в конструкторе просто не будет работать. Я знаю, что это немного противоречит интуитивному принципу, но вы получите менеджера в ваших методах действий.

И я предполагаю, что ваша константа класса Project :: NAME имеет что-то вроде & quot; ProjectBundle: Project & apos; в этом.

+1. Зависимости вводятся сеттером, поэтому$this->getDoctrine() терпит неудачу, так как это использует$this->container, которыйnull в качестве контейнера зависимости вводится сеттер.

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