Разбивка на страницы с использованием Zend Db Sql

#php #zend-framework #pagination #zend-framework2

#php #zend-framework #разбивка на страницы #zend-framework2

Вопрос:

Я следую этому руководству по документации zend, чтобы создать модуль блога с самого начала, закончил, и все работает правильно. В предыдущем уроке это было для создания модуля альбома, который они использовали TableGateway , а также показали, как создать разбивку на страницы с его помощью, но в этом модуле блога они этого не сделали, и они используют ZendDbSql .

Я пытался найти что-нибудь в Интернете об этом и ничего…

 public function findAllPosts()
{
    $sql       = new Sql($this->db);
    $select    = $sql->select('posts');
    $statement = $sql->prepareStatementForSqlObject($select);
    $result    = $statement->execute();

    if (! $result instanceof ResultInterface || ! $result->isQueryResult()) {
        return [];
    }

    $resultSet = new HydratingResultSet($this->hydrator, $this->postPrototype);
    $resultSet->initialize($result);
    return $resultSet;
}
  

В предыдущем уроке мы создали два метода, один вызывается fetchAll($paginated = false) , а другой вызывается fetchPaginatedResults , если $paginated значение true вызывает метод fetchPaginatedResults , например:

 public function fetchAll($paginated = false)
{
    if ($paginated) {
        return $this->fetchPaginatedResults();
    }

    return $this->tableGateway->select();
}

private function fetchPaginatedResults()
{
    // Create a new Select object for the table:
    $select = new Select($this->tableGateway->getTable());

    // Create a new result set based on the Album entity:
    $resultSetPrototype = new ResultSet();
    $resultSetPrototype->setArrayObjectPrototype(new Album());

    // Create a new pagination adapter object:
    $paginatorAdapter = new DbSelect(
        // our configured select object:
        $select,
        // the adapter to run it against:
        $this->tableGateway->getAdapter(),
        // the result set to hydrate:
        $resultSetPrototype
    );

    $paginator = new Paginator($paginatorAdapter);
    return $paginator;
}
  

Мне было интересно, как сделать то же самое, используя ZendDbSql and HydratingResultSet ?

Ответ №1:

Вы должны выбрать $db_adapter , и вы получите разбиение на страницы с помощью :

 use ZendPaginatorPaginator;
use ZendPaginatorAdapterDbSelect;

$sql = new Sql($this->db);
$select = $sql->select('posts');
new Paginator(new DbSelect($select, $db_adpter));
  

Комментарии:

1. Извините за мое невежество, но как мне выбрать метод $db_adapter внутри a?

2. В TableGateway методе a getAdapter() , довольно просто.

Ответ №2:

вы можете установить HydratingResultSet в Paginator.

Пример:

     $sql = new Sql ( $this->db );
    $select = $sql->select ( $this->table );

    //$statement = $sql->prepareStatementForSqlObject ( $select );
    //$result = $statement->execute ();     
    //if (! $result instanceof ResultInterface || ! $result->isQueryResult ()) {return [ ];}

    $resultSet = new HydratingResultSet ( $this->hydrator, $this->Prototype );
    //$resultSet->initialize ( $result );
    // return $resultSet;

    // Executando
    $adapter = new ZendPaginatorAdapterDbSelect ( $select, $this->db, $resultSet );
    $paginator = new ZendPaginatorPaginator ( $adapter );
    $paginator->setItemCountPerPage ( $count );
    $paginator->setCurrentPageNumber ( $offset );

    return $paginator;
  

но если вы будете использовать Paginator, я не уверен, что Hydrator — лучший вариант.

Помните, вам необходимо установить пакет (если это zf3)

 $ composer require zendframework/zend-paginator
Using version ^2.7 for zendframework/zend-paginator
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing zendframework/zend-paginator (2.7.0)
    Loading from cache


  Please select which config file you wish to inject 'ZendPaginator' into:
  [0] Do not inject
  [1] config/modules.config.php
  [2] config/development.config.php.dist
  Make your selection (default is 0):1

  Remember this option for other packages of the same type? (y/N)
Installing ZendPaginator from package zendframework/zend-paginator
zendframework/zend-paginator suggests installing zendframework/zend-cache (ZendCache component to support cache features)
Writing lock file
Generating autoload files