Symfony2 Doctrine自定义存储库类[语义错误]第0行,第14行靠近'Project p':错误:类'Project'未定义

Daw*_*iak 1 php symfony doctrine-orm

我是Symfony 2和Doctrine的新手,有一个简单的问题:

我的存储库中有一个非常简单的代码:

<?php

namespace BakeryIT\BakeryBundle\Entity;

use Doctrine\ORM\EntityRepository;

class ProjectRepository extends EntityRepository
{
    public function findHistory(){
        return $this->getEntityManager()
        ->createQueryBuilder()
        ->select('p')
        ->from('Project','p')
        ->getQuery()
        ->getResult();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的控制器中有两个简单的功能:

<?php

namespace BakeryIT\BakeryBundle\Controller;

/*
...
*/

class ProjectController extends Controller
{
    public function indexAction()
    {
        return $this->index('Project', 'findHistory');
    }
}
Run Code Online (Sandbox Code Playgroud)

控制器看起来像这样:

public function index($entity, $query = 'findAll')
{
    $repository = $this->getDoctrine()
        ->getRepository('BakeryBundle:'.$entity);

    $data = $repository->$query();

    return $this->render('BakeryBundle:'.$entity.':index.html.twig',
    array('data' => $data));
}
Run Code Online (Sandbox Code Playgroud)

这段代码告诉我在"Project p"附近的语义错误[Semantical Error]第0行第14行:错误:未定义类'Project'.

另一方面,如果我在我的存储库中更改此行,一切都很完美:

->from('Project','p')
Run Code Online (Sandbox Code Playgroud)

->from('BakeryIT\BakeryBundle\Entity\Project','p')
Run Code Online (Sandbox Code Playgroud)

我不知道为什么这个例子在第一种情况下不起作用.我的BakeryIT\BakeryBundle\Entity\Project中的命名空间以这种方式设置:

namespace BakeryIT\BakeryBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Project
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="BakeryIT\BakeryBundle\Entity\ProjectRepository")
 */
class Project
{
/*
..
*/
}
Run Code Online (Sandbox Code Playgroud)

rit*_*ter 7

要使用简短表单,您还需要提供包名称.这是从供应商和包名称构造的.在你的情况下,它将是这样的:

from('BakeryITBakeryBundle:Project')
Run Code Online (Sandbox Code Playgroud)

有关包的更多信息,请参阅以下链接:

http://symfony.com/doc/current/cookbook/bundles/best_practices.html