Вам нужно будет заменить поставщика услуг разбивки на страницы, среди нескольких других классов в библиотеке разбиения на страницы. По звуку этого вы знаете, как это сделать, но надеялись на другой ответ, но поскольку у меня есть код, я заберу его здесь для вас.
Причина, по которой вам необходимо заменить эти классы/методы, состоит в том, что файлы в Illuminate напрямую ссылаются на экземпляры классов в пространстве имен Illuminate.
В конфигурации/app.php
Заменить
'Illuminate\Pagination\PaginationServiceProvider',
С
'ExtendedPaginationServiceProvider',
Создать новый файл где-то автозагрузчик способен найти его называют ExtendedPaginationServiceProvider.php и поместить следующее в нем
<?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;
});
}
}
Создать новый файл где-то автозагрузчик способен найти его называют ExtendedPaginationFactory.php и разместить в нем следующее
<?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();
}
}
Создать новый файл где-то автозагрузчик способен найти его называют ExtendedPaginationPaginator.php и место в нем
<?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);
}
}
Вы заметите, что приведенное выше возвращает новый экземпляр ExtendedCollection. Очевидно, замените это на свой класс CustomCollection, на который вы ссылаетесь в своем вопросе.
Для других, чтобы ссылаться, класс ExtendedCollection может выглядеть так, как ниже
Создать новый файл где-то автозагрузчик способен найти его называют ExtendedCollection.php и разместить в нем следующее
<?php
use Illuminate\Support\Collection;
class ExtendedCollection extends Collection
{
}
Кроме того, после создания этих файлов, не забудьте запустить следующую команду в терминале
composer dump-autoload
Да вы совершенно правы, я бежать из вариантов, так что я придется заменить поставщика услуг. Хотя я определенно рад, что замена поставщика услуг - это вариант. Внимательно оценивайте глубинную реакцию на этот –