Konieczne będzie zastąpienie dostawcy usługi stronicowania wśród kilku innych klas w bibliotece stronicowania. Słysząc to, wiesz, jak to zrobić w ten sposób, ale liczyłeś na inną odpowiedź, ale ponieważ mam kod, wrzucę to tutaj dla ciebie.
Powodem, dla którego należy zastąpić te klasy/metody, jest fakt, że pliki w Iluminacja bezpośrednio odwołują się do wystąpień klas w przestrzeni nazw Iluminacja.
W config/app.php
Wymień
'Illuminate\Pagination\PaginationServiceProvider',
Z
'ExtendedPaginationServiceProvider',
Utwórz nowy plik gdzieś Autoloader jest zdolny do znalezienia go nazywa ExtendedPaginationServiceProvider.php i umieścić następujące w tym
<?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;
});
}
}
Utwórz nowy plik gdzieś Autoloader jest zdolny do znalezienia go nazywa ExtendedPaginationFactory.php i umieść w nim następujące
<?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();
}
}
utworzyć nowy plik gdzieś Autoloader jest zdolny do znalezienia go nazywa ExtendedPaginationPaginator.php i miejsce w nim:
<?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);
}
}
Zauważysz, że powyższe zwraca nowe wystąpienie ExtendedCollection. Zastąp ją oczywiście klasą CustomCollection, do której odwołujesz się w pytaniu.
dla innych odwołać, klasa ExtendedCollection może wyglądać podobnie do poniżej
utworzyć nowy plik gdzieś autoloaderze jest zdolny do znalezienia go nazywa ExtendedCollection.php i umieść w nim następujące
<?php
use Illuminate\Support\Collection;
class ExtendedCollection extends Collection
{
}
również po utworzeniu tych plików, nie zapomnij, aby uruchomić następujące polecenia w terminalu
composer dump-autoload
Yea masz całkowitą rację, ja zabrakło opcji więc Będzie musiał wymienić dostawcę usług. Chociaż zdecydowanie cieszę się, że zastąpienie usługodawcy jest opcją. Naprawdę doceniam głęboką odpowiedź na to –