KnpPaginatorBundle - Неустранимая ошибка: Doctrine\ORM\Query\AsIsHydrator содержит 1 абстрактный метод, который необходимо реализовать

Я пытаюсь интегрировать в свой проект Symfony KnpPaginatorBundle, который позволяет разбивать список объектов на страницы.

Поэтому я следовал инструкциям README, чтобы установить и настроить пакет, как обычно.

Но когда я тестирую реализацию примера KnpPaginatorBundle (реализация копирования и вставки), я получаю следующую ошибку:

Fatal error: Class Knp\Component\Pager\Event\Subscriber\Paginate\Doctrine\ORM\Query\AsIsHydrator contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Doctrine\ORM\Internal\Hydration\AbstractHydrator::_hydrateAll) in D:\workspace\wedding\vendor\knp-components\src\Knp\Component\Pager\Event\Subscriber\Paginate\Doctrine\ORM\Query\AsIsHydrator.php on line 13

В гугле решения не нашел :-/

Любая помощь приветствуется... спасибо

Мой контроллер:

/**
 * @Route("/pagin", name="pagin")
 * @Template()
 */
public function paginAction(){
    $em    = $this->get('doctrine.orm.entity_manager');
    $dql   = "SELECT c FROM LgpWeddingBundle:Contact c";
    $query = $em->createQuery($dql);

    $paginator  = $this->get('knp_paginator');
    $pagination = $paginator->paginate(
            $query,
            $this->get('request')->query->get('page', 1)/*page number*/,
            10/*limit per page*/
    );

    // parameters to template
    // return $this->render('LgpWeddingBundle:Contact:pagin.html.twig', array('pagination' => $pagination));
    return array('pagination' => $pagination);
}

Knp\Component\Pager\Event\Subscriber\Paginate\Doctrine\ORM\Query\AsIsHydrator:

class AsIsHydrator extends AbstractHydrator
{
    /**
     * Hydrates all rows from the current statement instance at once.
     */
    protected function hydrateAllData()
    {
        return $this->_stmt->fetchAll(\PDO::FETCH_ASSOC);
    }
}

Доктрина\ORM\Internal\Hydration\AbstractHydrator:

abstract class AbstractHydrator
{
    //...

    /**
     * Hydrates all rows from the current statement instance at once.
     */
    abstract protected function _hydrateAll();

    //...
}

person gudepier    schedule 19.08.2013    source источник


Ответы (1)


Похоже, вы используете старую версию Doctrin/ORM. В последней версии должно работать. Вероятно, это проблема с composer.json KNPPaginatorBundle, но если вы хотите быстро исправить, просто обновите доктрину.

Просто из любопытства, вы использовали Composer для установки KNPPaginator? Если да, то не могли бы вы предоставить свои версии.

РЕДАКТИРОВАТЬ: я только что проверил Bundles, и в любом случае они не зависят от Doctrine/ORM, поэтому единственное решение - обновить его вручную.

person m0c    schedule 19.08.2013
comment
Привет, m0c, я использовал старый школьный способ: обновил файл deps и выполнил php bin/vendors install ;-) Я не указал версию для KnpPaginatorBundle и ее зависимости knp-components, и версия доктрины, которую я использую, — 2.1.5. - Значит, по вашему совету мне нужно просто обновить версию моей доктрины (я полагаю, до 2.2.x)? Я надеюсь, что не будет конфликтов обновлений... спасибо - person gudepier; 20.08.2013
comment
Обновление доктрины включает в себя слишком много последствий/модификаций зависимостей одновременно... Для разрешения каждого конфликта зависимостей требуется слишком много времени. Я создам POC на свежей версии Symfony 2.3... - поживем-увидим ;-) - person gudepier; 20.08.2013
comment
Возможно, вам следует использовать момент, чтобы перейти к композитору для управления зависимостями, так как вы все равно переходите на S 2.3. - person m0c; 20.08.2013
comment
Да, это тоже было в моих планах ;-) - person gudepier; 21.08.2013