Я следую учебнику Symfony2 (глава 4), но у меня возникли проблемы с получением метода getLatestBlogs
из моего пользовательского репозитория.Не удается получить пользовательские хранилища
Я использую Symfony 2.2 с Phar на Монетном дворе Linux.
Я сам создал репозиторий, но я в тупике. Я получаю эту ошибку:
Undefined method 'getLatestBlogs'. The method name must start with either findBy or 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();
}
}
ну, вы сказали, что создали репозиторий самостоятельно, но ваш код показывает комментарий, который команда Doctrine генерирует? –
Это вырезание и вставка из учебника. – prime
В нем четко указано, что имя метода не соответствует соглашению. Попробуйте переименовать его в findByDate, где Date - это имя столбца объекта. – Bart