2016-01-08 2 views
3

Я пытаюсь использовать пользовательский репозиторий для моего симфони 2.8 веб-сайт:Symfony: не может позволить пользовательский репозиторий

пользовательского хранилища:

// src/AppBundle/Entity/ExperimentationRepository 
namespace AppBundle\Entity; 

use Doctrine\ORM\EntityRepository; 

class ExperimentationRepository extends EntityRepository 
{  
    public function getExperimentationByUser($id){ 
     // do stuff and return results 
    }  
} 

Entity:

// src/AppBundle/Entity/Experimentation 
namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Experimentation 
* 
* @ORM\Table(name="experimentation") 
* @ORM\Entity(repositoryClass="AppBundle\Entity\ExperimentationRepository") 
*/ 
class Experimentation{ 
    // sutff 
} 

контроллер (где я пытаюсь использовать пользовательский репозиторий в другом комплекте):

// src/ManageBundle/Controller/ManageController 
$em = $this->getDoctrine()->getManager(); 
$experimentations = $em->getRepository('AppBundle:Experimentation')->getExperimentationByUser($id); 

я получил следующее сообщение об ошибке:

Undefined method 'getExperimentationByUser'. The method name must start with either findBy or findOneBy!

После некоторых исследований, я попытался проверить, если мой пользовательский репозиторий называется или нет:

$repository=$this->getDoctrine() 
     ->getRepository('AppBundle:Experimentation'); 
     $repositoryClass=get_class($repository); 
echo $repositoryClass; 
exit; 

Который возвращает:

Doctrine\ORM\EntityRepository 

Так что я думаю, что мой пользовательский репозиторий вообще не вызывается. Но я не могу найти, почему. Я пытался несколько действий (после некоторого копания):

  • Очистить кэш (app/console cache:clear)
  • очистить кэш учение (app/console doctrine:cache:clear-metadata)
  • проверка config.yml (по учению ОРМ): auto_mapping: true
  • проверка config.yml (по учению DBAL): type: annotation
  • у меня нет какой-либо папки конфигурации/доктрины (это нормально?)

Ничего не сработало. По-прежнему такая же ошибка. Похоже, что структура полностью игнорирует аннотацию в классе сущности. Любая идея/предложение?

Благодарим за помощь!

+0

У вас возникли сущности? – AnkiiG

+0

Довольно загадка. У вас определен только один менеджер сущностей? Я подозреваю, что где-то просто опечатка.Доктрина приложения/консоли: сопоставление: информация выбирает объект? И да, это нормально, если config/doctrine будет пустым при использовании аннотаций. config/doctrine - это где обычно хранятся файлы отображения yaml или xml. Фактически, если бы у вас были файлы, аннотации были бы проигнорированы. – Cerad

+0

Создаются объекты. 'app/console doctrine: mapping: info' выбирает все из них с тегом« OK ». – DavidL

ответ

0

я, наконец, управлять, чтобы заставить его работать. После нескольких команд мне удалось создать AppBundle/Resources/config/doctrine file. Он был полон .orm.xml файлов, так что я просто взял синтаксис XML из дока:

<entity 
    name="AppBundle\Entity\Experimentation" 
    repository-class="AppBundle\Entity\ExperimentationRepository"> 

Однако, я до сих пор не понимаю, почему система аннотаций не работает, так как я так старался, чтобы включить Это. Есть ли хотя бы способ проверить, какая система (XML, YAML или Annotation) включена? Не стесняйтесь комментировать, если у вас есть ключ ...

+0

В своем первоначальном вопросе вы сказали, что вы проверили конфиг/доктрину? Вы также проверяли AppBundle/Resources/config/doctrine. Если бы у вас были файлы, это объясняло бы, почему аннотации игнорируются. – Cerad

+0

Это именно то, что происходит. Будет ли рассмотрена аннотация, если я удалю эти файлы? – DavidL

+0

Да. Удалите. – Cerad

0

ли вы попробовать так:

// src/ManageBundle/Controller/ManageController 

$em = $this->getDoctrine()->getManager(); 
$repository = $em->getRepository('AppBundle:Experimentation'); 
$experimentations = $repository->getExperimentationByUser($id); 

и генерировать объект

php app/console doctrine:generate:entities Experimentation 
+0

Да, я попытался сгенерировать объекты. Все выглядит отлично, за исключением того, что он не работает при загрузке страницы. Я пробовал ваш код, даже если он точно такой же, как у меня (вы просто добавляете репозиторий var в середине); он не решает этого. Спасибо, в любом случае! – DavidL

0

Вы просто удаляете папку с кешем. ясный кеш с командой CLI не работал для меня. php app/console cache:clear