bnmosria / paginator-adapter
此包已被弃用且不再维护。未建议替代包。
一个Laminas框架模块(前身为Zend Framework),它使用doctrine和zend paginator提供分页功能。
0.2.1
2020-06-06 13:30 UTC
Requires
- php: ^7.3
- doctrine/orm: ^2.6.1
- laminas/laminas-modulemanager: ^2.7
- laminas/laminas-paginator: ^2.7
Requires (Dev)
- php-coveralls/php-coveralls: ^2.0
- phpunit/phpunit: ^7.0
This package is auto-updated.
Last update: 2022-11-06 20:05:22 UTC
README
描述
一个Laminas框架模块(前身为Zend Framework),它使用doctrine和zend paginator提供分页功能。
安装
您可以通过Composer安装此包
composer require bnmosria/paginator-adapter
用法
有关如何使用Laminas-Pagination的说明,请参阅此页面 https://docs.laminas.dev/laminas-paginator/usage/.
在您的实体仓库中,您返回一个包含所需结果集的doctrine分页器,例如
use Doctrine\ORM\Tools\Pagination\Paginator; ... /** * Should return a doctrine paginator with a result set of posts * @return Paginator */ public function findPostsByPagination(int $offset = 0, int $limit = 5): Paginator { $queryBuilder = $this->_em->createQueryBuilder(); $queryBuilder->select('p') ->from(Post::class, 'p') ->orderBy('p.id', 'DESC') ->setFirstResult($offset) ->setMaxResults($limit); return new Paginator($queryBuilder->getQuery()); }
然后您可以使用一个服务来请求您的PostRepository中的帖子,例如
use Post\Repository\PostRepository; use PaginatorAdapter\Adapter\Factory\PaginatorFactory; use PaginatorAdapter\Adapter\PaginatorAdapter; use Laminas\Paginator\Paginator; ... /** * PostService constructor. * * @param PostRepository $postRepository * @param PaginatorAdapter $doctrinePaginatorAdapter * @param PaginatorFactory $paginatorFactory */ public function __construct( PostRepository $postRepository, PaginatorAdapter $doctrinePaginatorAdapter, PaginatorFactory $paginatorFactory ) { $this->postRepository = $postRepository; $this->doctrinePaginatorAdapter = $doctrinePaginatorAdapter; $this->paginatorFactory = $paginatorFactory; } ... /** * Should return a zend paginator with a result set of posts * * @return Paginator */ public function getPostsByPagination(int $offset = 0, int $limit = 5): Paginator { $postsPaginator = $this->postRepository ->findPostsByPagination($offset, $limit); $this->doctrinePaginatorAdapter ->setPaginator($postsPaginator); return $this->zendPaginatorFactory ->create($this->doctrinePaginatorAdapter); } ...
在控制器中的操作中,只需调用服务以获取包含结果集的Laminas-Paginator对象。
use Post\Services\PostService; ... /** * PostController constructor. * * @param \Post\Services\PostService $postService */ public function __construct(PostService $postService) { $this->postService = $postService; } ... public function indexAction(): ViewModel { $page = $this->params()->fromRoute('page'); $maxResult = $this->params()->fromRoute('max_per_page'); $paginator = $this->postService ->getPostsByPagination($page, $maxResult); $paginator ->setCurrentPageNumber($page) ->setItemCountPerPage($maxResult); // Here you have a Laminas-Paginator, just use it in your // view as documented here: https://docs.laminas.dev/laminas-paginator/usage/ return new ViewModel(['posts' => $paginator]); }