2015-03-05 1 views
-1

Сейчас я работаю с Part 4 OF The SymBlog project Я получаю эту ошибку сообщение Symfony2 в:Symfony2 Неопределенный метод. Имя метода должно начинаться с findBy или findOneBy

Undefined method 'getLatestPosts'. The method name must start with either findBy 
or findOneBy!500 Internal Server Error - BadMethodCallException 

Это мой PostRepository Класс:

<?php 

namespace BLog\BlogBundle\Entity; use Doctrine\ORM\EntityRepository; 

class PostRepository extends EntityRepository { 

    public function getLatestPosts($limit = null) { 
     $qp = $this->createQueryBuilder('p') 
       ->select('p') 
       ->addOrderBy('p.created', 'DESC'); 

     if (false === is_null($limit)) { 
      $qp->setMaxResults($limit); 
     } 


     return $qp->getQuery() 
         ->getResult(); 
    } 

} 

Это Страница контроллера. Метод действия:

<?php 

namespace Blog\BlogBundle\Controller; 
use Symfony\Bundle\FrameworkBundle\Controller\Controller; 

class DefaultController extends Controller { 

    public function indexAction() { 
     $em = $this->getDoctrine() 
       ->getEntityManager(); 

     $posts = $em->getRepository('BlogBundle:Post') 
       ->getLatestPosts(); 

     return $this->render('BlogBundle:Default:home.html.twig', > >array(
        'posts' => $posts 
     )); 
    } 
... 
} 

Это образец мой код ../../../Entity/Post:

<?php 

namespace Blog\BlogBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @ORM\Entity(repositoryClass="Blog\BlogBundle\Entity\PostRepository") 
* @ORM\Table(name="post") 
* @ORM\HasLifecycleCallbacks 
*/ 

class Post { 


.... 
... 
.. 
/** 
    * @ORM\Column(type="text") 
    */ 
    protected $post; 
... 
... 

Я также попытался все решения в этом post по ScoRpion

Что здесь проблема ???

+0

все выглядит хорошо, поэтому должно работать. У вас есть опечатка в '' namespace BLog \ BlogBundle \ Entity'' (капитал '' L'' в '' BLOG''). Это не имеет значения, но попробуйте изменить его. –

+0

Спасибо @ Tomasz Madeysk за ваш ответ .. все-таки проблема существует .... Я попытался переслать метод getLatestPosts(), но он ничего не ответил –

+0

Возможный дубликат [SymBlog: Неопределенный метод. Имя метода должно начинаться с findBy или findOneBy] (http://stackoverflow.com/questions/28852157/symblog-undefined-method-the-method-name-must-start-with-either-findby-or-find) –

ответ

2

Проверьте это:

$posts = $em->getRepository('BlogBundle:Post') 
       ->getLatestPosts(); 

Должно быть

$posts = $em->getRepository('BlogBlogBundle:Post') 
       ->getLatestPosts(); 

Посмотрите пространства имен.

+0

Первоначально я определил «BlogBundle» как мой псевдоним пространства имен в моей начальной настройке ... –

-2

Решение было поместить класс хранилища внутри каталога Entity рядом с почтовым Сущности и это класс сущностей теперь:

<?php 

namespace Blog\BlogBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
* @ORM\Entity(repositoryClass="PostRepository") 
* @ORM\Table(name="post") 
* @ORM\HasLifecycleCallbacks 
*/ 

class Post { 


.... 
... 
.. 
/** 
    * @ORM\Column(type="text") 
    */ 
    protected $post; 
... 
... 
1

Для меня решение было поставить только имя репозитория, без полного пути к нему.

Был (ошибка):

* @ORM\Entity(repositoryClass="OC\PlatformBundle\Repository\AdvertRepository") 

Должен быть (рабочий):

* @ORM\Entity(repositoryClass="AdvertRepository") 
+0

Неправильное. У вас должен быть полный путь. Что делать, если вы перемещаете свой репозиторий во вложенную папку? –

2

Удаление полного пути к хранилищу из класса Entity аннотации работает для меня: @ORM\Entity(repositoryClass="AdvertRepository")
Я надеваю Не понимаю почему, хотя ...

Смежные вопросы