私は 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();
}
}
そして、コントローラーの 2 つの単純な関数:
<?php
namespace BakeryIT\BakeryBundle\Controller;
/*
...
*/
class ProjectController extends Controller
{
public function indexAction()
{
return $this->index('Project', 'findHistory');
}
}
コントローラーは次のようになります。
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));
}
このコードはセマンティカル エラー[Semantical Error] line 0, col 14 near 'Project p': Error: Class 'Project' is not defined をスローします。
一方、リポジトリで次の行を変更すると、すべてが完全に機能します。
->from('Project','p')
に
->from('BakeryIT\BakeryBundle\Entity\Project','p')
この例が最初のケースで機能しない理由がわかりません。私の 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
{
/*
..
*/
}