1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- <?php
-
- namespace think\paginator;
-
- use Exception;
- use think\Paginator;
-
- /**
- * Class Collection
- * @package think\paginator
- * @method integer total()
- * @method integer listRows()
- * @method integer currentPage()
- * @method string render()
- * @method Paginator fragment($fragment)
- * @method Paginator appends($key, $value)
- * @method integer lastPage()
- * @method boolean hasPages()
- */
- class Collection extends \think\Collection
- {
-
- /** @var Paginator */
- protected $paginator;
-
- public function __construct($items = [], Paginator $paginator = null)
- {
- $this->paginator = $paginator;
- parent::__construct($items);
- }
-
- public static function make($items = [], Paginator $paginator = null)
- {
- return new static($items, $paginator);
- }
-
- public function toArray()
- {
- if ($this->paginator) {
- try {
- $total = $this->total();
- } catch (Exception $e) {
- $total = null;
- }
-
- return [
- 'total' => $total,
- 'per_page' => $this->listRows(),
- 'current_page' => $this->currentPage(),
- 'data' => parent::toArray()
- ];
- } else {
- return parent::toArray();
- }
- }
-
- public function __call($method, $args)
- {
- if ($this->paginator && method_exists($this->paginator, $method)) {
- return call_user_func_array([$this->paginator, $method], $args);
- } else {
- throw new Exception('method not exists:' . __CLASS__ . '->' . $method);
- }
- }
- }
|