2014-12-23 2 views
0

Я пытаюсь работать с репозиторием Entity, чтобы писать свои пользовательские функции.Репозиторий с symfony2 и Doctrine не работает

У меня есть Субъекта и его Repository генерируется из YAML файла

YAML файл

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

Entity код генерируется автоматически

namespace Bluesys\WeekupBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

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

    ... 

} 

Repository код генерируется автоматически я Жюст написал функцию 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 }} 

Я получаю эту ошибку: Метод " isHidden "для r объект «Bluesys \ WeekupBundle \ Entity \ Event» не существует в BluesysWeekupBundle :: test.html.twig в строке 1

Может ли кто-нибудь помочь мне, сообщив мне, чего не хватает?

+0

Вы можете попробовать это 'event.id', например в вашу ветку, просто чтобы увидеть, если речь идет о событии или из хранилища методы – smarber

+0

взгляните на это http://stackoverflow.com/questions/18277211/how-to-use-custom-repository-methods-in-twig-template – smarber

+0

Вы не должны вызывать функцию репо. То бизнес-логика, которая не должна появляться в шаблонах. – vijaykumar

ответ

1

Классы хранилища используются только для выбора/выборки данных. Они не являются частью объекта/объекта. Если вы действительно хотите вызвать метод isHidden репозиторием, вы можете получить это, передав весь репозиторий шаблону (return $this->render('BluesysWeekupBundle::test.html.twig', array('event' => $repository));), но это очень плохая идея.

Вместо этого вы можете поместить isHidden() метод в классе сущностей и назвать его как event.isHidden ..

+0

Спасибо ... и могу ли я написать некоторые запросы в методе isHidden? – Ced

+1

@Ced Конечно, вы можете написать. Запрос должен возвращать массив объектов, один объект, частичный объект или некоторые поля объекта как результат массива. – xurshid29

+0

В этой статье я прочитал, что getDoctrine() не следует использовать в классах Entity. Кроме того, я не могу получить доступ к EntityManager из класса Entity. [getDoctrine() в статье Entity] (https://groups.google.com/forum/#!topic/symfony2/2o9ysz-fk7o) – Ced