app->singleton('settings', function ($app) { return $app['cache']->remember('core.settings', now()->addDay(), function () { try { return Setting::pluck('value', 'key')->toArray(); } catch (\Exception $exception) { return []; } }); }); if (!$this->app->request->is('api*')) { $this->registerLengthAwarePaginator(); } } protected function registerLengthAwarePaginator() { $this->app->bind(LengthAwarePaginator::class, function ($app, $values) { return new class(...array_values($values)) extends LengthAwarePaginator { public function only(...$attributes) { return $this->transform(function ($item) use ($attributes) { return $item->only($attributes); }); } public function transform($callback) { $this->items->transform($callback); return $this; } public function toArray() { return [ 'data' => $this->items->toArray(), 'links' => $this->links(), 'per_page' => $this->perPage(), 'total' => $this->total(), ]; } public function links($view = null, $data = []) { $this->appends(Request::all()); $window = UrlWindow::make($this); $elements = array_filter([ $window['first'], is_array($window['slider']) ? '...' : null, $window['slider'], is_array($window['last']) ? '...' : null, $window['last'], ]); return Collection::make($elements)->flatMap(function ($item) { if (is_array($item)) { return Collection::make($item)->map(function ($url, $page) { return [ 'url' => $url, 'label' => $page, 'active' => $this->currentPage() === $page, ]; }); } else { return [ [ 'url' => null, 'label' => '...', 'active' => false, ], ]; } }); } }; }); } }