无法使自定义存储库正常工作

pri*_*ime 10 symfony doctrine-orm

我正在关注Symfony2教程(第4章),但是我无法getLatestBlogs从自定义存储库中检索该方法.

我在Linux Mint上使用Symfony 2.2和Phar.

我自己创建了存储库,但我很难过.我收到此错误:

未定义的方法'getLatestBlogs'.方法名称必须以findBy或findOneBy开头! - BadMethodCallException

我搜索了其他类似的问题,但无济于事.任何人都可以在我的代码中发现错误吗?

附加信息

我的composer.json内容如下:

"require": {
    "php": ">=5.3.3",
    "symfony/symfony": "2.2.0", ** NOTE : Originally read 2.2.* but I changed and successfully ran a composer update **
    "doctrine/orm": ">=2.2.3,<2.4-dev",
    "doctrine/doctrine-bundle": "1.2.*",
    "twig/extensions": "1.0.*",
    "symfony/assetic-bundle": "2.1.*",
    "symfony/swiftmailer-bundle": "2.2.*",
    "symfony/monolog-bundle": "2.2.*",
    "sensio/distribution-bundle": "2.2.*",
    "sensio/framework-extra-bundle": "2.2.*",
    "sensio/generator-bundle": "2.2.*",
    "jms/security-extra-bundle": "1.4.*",
    "jms/di-extra-bundle": "1.3.*",
    "doctrine/doctrine-fixtures-bundle": "dev-master",
    "doctrine/data-fixtures" : "dev-master"        
},
Run Code Online (Sandbox Code Playgroud)

我的src/Blogger/BlogBundle/Controller/PageController.php:

namespace Blogger\BlogBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Blogger\BlogBundle\Entity\Enquiry;
use Blogger\BlogBundle\Form\EnquiryType;

class PageController extends Controller
{
    public function indexAction()
    {
        $em = $this->getDoctrine()
               ->getManager();

        $blogs = $em->getRepository('BloggerBlogBundle:Blog')->getLatestBlogs();

        return $this->render('BloggerBlogBundle:Page:index.html.twig', array(
            'blogs' => $blogs
        ));
    }
Run Code Online (Sandbox Code Playgroud)

最初的谎言和我src/Blogger/BlogBundle/Entity/Blog.php:

namespace Blogger\BlogBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="blog")
 * @ORM\Entity(repositoryClass="Blogger\BlogBundle\Repository\BlogRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class Blog
{
Run Code Online (Sandbox Code Playgroud)

最后我的src/Blogger/BlogBundle/Repository/BlogRepository.php:

namespace Blogger\BlogBundle\Repository;

use Doctrine\ORM\EntityRepository;

/**
 * BlogRepository
 *
 * This class was generated by the Doctrine ORM. Add your own custom
 * repository methods below.
 */
class BlogRepository extends EntityRepository
{

    public function getLatestBlogs($limit = null)
    {
        $qb = $this->createQueryBuilder('b')
                   ->select('b')
                   ->addOrderBy('b.created', 'DESC');

        if (false === is_null($limit))
            $qb->setMaxResults($limit);

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

}
Run Code Online (Sandbox Code Playgroud)

Bra*_*sen 21

您可以检查以下内容以解决此问题:

  • 确保注释中的FQCN与存储库文件的类名相匹配,并且已设置正确的命名空间.

  • 如果您具有此活动或暂时禁用Doctrine缓存,请清除所有元数据缓存.

    app/console doctrine:cache:clear-metadata

  • 检查annotation您的配置中是否设置了映射类型.即如果你必须在yml文件中yml定义你repositoryClass的.