symfony2和Doctrine的存储库无法正常工作

时间:2014-12-23 09:48:34

标签: symfony doctrine repository

我正在尝试使用Entity Repository来编写我的自定义函数。

我有一个实体和他的存储库是从yaml文件生成的

Yaml文件

Bluesys\WeekupBundle\Entity\Event:
  type: entity
  repositoryClass: Bluesys\WeekupBundle\Repository\Event
  fields:
    id:
      id: true
      type: integer
      generator:
        strategy: AUTO
  ...

自动生成的实体代码     

namespace Bluesys\WeekupBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
* Event
*/
class Event
{
    /**
    * @var integer
    */
    private $id;

    ...

}

自动生成存储库代码 我juste写了函数isHidden

namespace Bluesys\WeekupBundle\Repository;

use Doctrine\ORM\EntityRepository;

/**
 * Event
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class Event extends EntityRepository
{
    /**
     * isHidden
     *
     * @return bool  
     */
    public function isHidden()
    {
       return true;
    }
}

控制器代码

namespace Bluesys\WeekupBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Bluesys\WeekupBundle\Event\Event;

...

class TimelineController extends Controller
{

    public function testAction(){

        $repository = $this->getDoctrine()->getManager()->getRepository('BluesysWeekupBundle:Event');
        $event = $repository->findOneById( 73 );

        return $this->render('BluesysWeekupBundle::test.html.twig', array( 'event' => $event ));
    }

    ...

和观看代码

{{ event.isHidden }}

我收到此错误: 对象“Bluesys \ WeekupBundle \ Entity \ Event”的方法“isHidden”在第1行的BluesysWeekupBundle :: test.html.twig中不存在

有人可以通过告诉我缺少什么来帮助我吗?

1 个答案:

答案 0 :(得分:1)

存储库类仅用于选择/获取数据。它们不是实体/对象的一部分。 如果你真的想通过存储库调用isHidden方法,你可以通过将整个存储库传递给模板(return $this->render('BluesysWeekupBundle::test.html.twig', array( 'event' => $repository ));)来实现这一点,但这是非常糟糕的主意。

相反,您可以将isHidden()方法放入您的实体类中,并将其称为event.isHidden ..