62 lines
2.1 KiB
Markdown
62 lines
2.1 KiB
Markdown
# Intro to Knp Pager Component
|
|
|
|
This is a PHP 5.3 paginator with a totally different core concept.
|
|
|
|
**Note:** it is still experimental, any ideas on structural design are very welcome
|
|
|
|
How is it different? First of all, it uses Symfony's **event dispatcher** to paginate whatever is needed.
|
|
The pagination process involves triggering events which hit the **subscribers**. If the subscriber
|
|
knows how to paginate the given object, it does. Finally, some subscriber must initialize the
|
|
**pagination view** object, which will be the result of pagination request. Pagination view
|
|
can be anything which will be responsible for how to render the pagination.
|
|
|
|
**Magic?** no! only KISS principle
|
|
|
|
Why reinvent the wheel? Can someone tell me what's the definition of **wheel** in the software world?
|
|
|
|
## Requirements:
|
|
|
|
- Symfony EventDispatcher component
|
|
- Namespace based autoloader for this library
|
|
|
|
## Features:
|
|
|
|
- Can be customized in any way needed, etc.: pagination view, event subscribers.
|
|
- Possibility to add custom filtering, sorting functionality depending on request parameters.
|
|
- Pagination view extensions based on event.
|
|
- Paginator extensions based on events, etc.: another object pagination compatibilities.
|
|
- Supports multiple paginations during one request
|
|
- Separation of concern, paginator is responsible for generating the pagination view only,
|
|
pagination view - for representation purposes.
|
|
- Does not require initializing specific adapters
|
|
- [configurable](config.md)
|
|
|
|
## Usage examples:
|
|
|
|
### Controller
|
|
|
|
```php
|
|
$paginator = new Knp\Component\Pager\Paginator;
|
|
$target = range('a', 'u');
|
|
// uses event subscribers to paginate $target
|
|
$pagination = $paginator->paginate($target, 2/*page*/, 10/*limit*/);
|
|
|
|
// iterate paginated items
|
|
foreach ($pagination as $item) {
|
|
//...
|
|
}
|
|
echo $pagination; // renders pagination
|
|
|
|
// overriding view rendering
|
|
|
|
$pagination->renderer = function($data) use ($template) {
|
|
return $twig->render($template, $data);
|
|
};
|
|
|
|
echo $pagination;
|
|
|
|
// or paginate Doctrine ORM query
|
|
|
|
$pagination = $paginator->paginate($em->createQuery('SELECT a FROM Entity\Article a'), 1, 10);
|
|
```
|