10

Symfony2チュートリアル(第4章)に従っていますがgetLatestBlogs、カスタムリポジトリからメソッドを取得するのに問題があります。

LinuxMintのPharでSymfony2.2を使用しています。

自分でリポジトリを作成しましたが、困惑しています。このエラーが発生します:

未定義のメソッド'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"        
},

私の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
        ));
    }

もともと嘘と私の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
{

そして最後に私の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();
    }

}
4

4 に答える 4

22

この問題を解決するには、以下を確認してください。

  • アノテーションのFQCNがリポジトリファイルのクラス名と一致し、正しい名前空間が設定されていることを確認してください。

  • これをアクティブにしている場合、またはDoctrineキャッシュを一時的に無効にしている場合は、すべてのメタデータキャッシュをクリアします。

    app/console doctrine:cache:clear-metadata

  • 構成でマッピングタイプがに設定されているかどうかを確認annotationします。つまり、ymlファイルでyml自分を定義する必要がある場合です。repositoryClass

于 2013-03-09T20:56:38.293 に答える
4

私の問題は、生成されたxmlファイルが注釈をオーバーライドし続けるという事実でした。注釈と他のタイプの構成を一緒に常駐させることはできないことを読みましたが、私のものがまだ存在していることを忘れました。

src / xxxx / xxxBundle / Resources / config / doctrineにエンティティ定義(つまりSomeEntity.orm.xml)がないことを確認してください

于 2014-10-04T13:00:11.240 に答える
3

私の解決策は、エンティティアノテーションの順序を変更することでした。

/**
* Comments
* 
* @ORM\Entity(repositoryClass="CmsBundle\Entity\CommentsRepository")
* @ORM\Table()
* @ORM\Entity    
*/

動作しませんでしたが

/**
* Comments
* 
* @ORM\Table()
* @ORM\Entity
* @ORM\Entity(repositoryClass="CmsBundle\Entity\CommentsRepository")
*/

動作しました:)

于 2015-06-03T13:42:31.803 に答える
-1

コントローラに追加use Blogger\BlogBundle\Entity\Blog;してみてください。

于 2013-03-09T20:00:47.553 に答える