8

エラーが発生します

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);
    }
}
4

1 に答える 1

13

Symfony 2 コントローラーには __construct メソッドがないため、親コンストラクターを呼び出すことは悪い考えではありませんが、役に立ちません。

問題は、コンテナーが __construct の後に注入されるため、コンストラクターでドクトリン エンティティ マネージャーを取得しようとしてもうまくいかないことです。少し直感に反することはわかっていますが、アクションメソッドでマネージャーを取得してください。

そして、あなたの Project::NAME クラス定数には「ProjectBundle:Project」のようなものが含まれていると思います。

于 2012-05-07T10:36:56.093 に答える