Sarà necessario sostituire il fornitore del servizio di impaginazione, tra un paio di altre classi nella libreria di impaginazione. A giudicare dal suono, sai come farlo in questo modo, ma speravi in un'altra risposta, ma dato che ho il codice lo lascerò qui per te.
Il motivo per cui è necessario sostituire queste classi/metodi è perché i file in Illuminate fanno riferimento direttamente alle istanze di classi all'interno dello spazio dei nomi Illuminate.
in config/app.php
Sostituire
'Illuminate\Pagination\PaginationServiceProvider',
Con
'ExtendedPaginationServiceProvider',
Creare un nuovo file da qualche parte il caricatore automatico è in grado di trovare lo chiama ExtendedPaginationServiceProvider.php e inserire il seguente in esso
<?php
use Illuminate\Support\ServiceProvider;
class ExtendedPaginationServiceProvider extends ServiceProvider
{
/**
* @inheritdoc
*/
public function register()
{
$this->app->bindShared('paginator', function($app)
{
$paginator = new ExtendedPaginationFactory($app['request'], $app['view'], $app['translator']);
$paginator->setViewName($app['config']['view.pagination']);
$app->refresh('request', $paginator, 'setRequest');
return $paginator;
});
}
}
Creare un nuovo file da qualche parte il caricatore automatico è in grado di trovare che ha definito ExtendedPaginationFactory.php e inserire il seguente in esso
<?php
use Illuminate\Pagination\Factory;
class ExtendedPaginationFactory extends Factory
{
/**
* @inheritdoc
*/
public function make(array $items, $total, $perPage = null)
{
$paginator = new ExtendedPaginationPaginator($this, $items, $total, $perPage);
return $paginator->setupPaginationContext();
}
}
creare un nuovo file da qualche parte il caricatore automatico è in grado di trovare che ha definito ExtendedPaginationPaginator.php e luogo il seguente in esso
<?php
use Illuminate\Pagination\Paginator;
class ExtendedPaginationPaginator extends Paginator
{
/**
* Get a collection instance containing the items.
*
* @return ExtendedCollection
*/
public function getCollection()
{
return new ExtendedCollection($this->items);
}
}
Si noterà quanto sopra restituisce una nuova istanza di ExtendedCollection. Ovviamente sostituiscilo con la tua classe CustomCollection a cui fai riferimento nella tua domanda.
Per gli altri a riferimento, una classe ExtendedCollection potrebbe essere simile al di sotto
Creare un nuovo file da qualche parte il caricatore automatico è in grado di trovare lo chiama ExtendedCollection.php e inserire il seguente in esso
<?php
use Illuminate\Support\Collection;
class ExtendedCollection extends Collection
{
}
Inoltre, dopo la creazione di questi file, non dimenticare di eseguire il seguente nel terminale
composer dump-autoload
Sì avete perfettamente ragione, ho esaurito di opzioni in modo da Dovrò sostituire il fornitore di servizi. Anche se sono decisamente lieto che la sostituzione del fornitore di servizi sia un'opzione. Apprezzo davvero la risposta approfondita su questo –