我目前正在处理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 在这篇文章中的所有解决方案
这里的问题是什么???
此处无需使用存储库。如果您是通过引用实体直接获取数据,那么您应该使用findBy或通过数据库字段名称发布的findOneBy。请尝试以下方式:
namespace Blog'BlogBundle'Controller;
use Symfony'Bundle'FrameworkBundle'Controller'Controller;
class DefaultController extends Controller {
public function indexAction() {
$posts = this->forward('BlogBundle:Post:getLatestPosts', array(), array());
return $this->render('BlogBundle:Default:home.html.twig', > >array(
'posts' => $posts
));
}
...
}