Symfony2未定义的方法.方法名称必须以findBy或findOneBy开头


Symfony2 Undefined method. The method name must start with either findBy or findOneBy

我目前正在处理Symfony2的SymBlog项目的第4部分我收到以下错误消息:

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
        ));
    }
...
}

这是我的../..//实体/邮政编码:

<?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;
...
...

我也尝试了ScoRpion 在这篇文章中的所有解决方案

这里的问题是什么???

看看这个:

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

必须是

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

查找您的命名空间。

从Entity类注释中删除Repository的完整路径对我来说很有效:@ORM'Entity(repositoryClass="AdvertRepository")
我不明白为什么。。。

对我来说,解决方案是只输入存储库的名称,而不输入它的完整路径

曾经(错误):

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

应该(工作):

* @ORM'Entity(repositoryClass="AdvertRepository")

解决方案是将存储库类放在发布实体旁边的实体目录中,现在是实体类:

<?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;
...
...