В конце концов, мне пришлось закодировать себе Paginator. Я отправляю здесь свое решение, если оно поможет кому-либо.
Обратите внимание, что решение, в то время как функциональное, требует некоторой осторожности для практического использования (о валидации); класс упрощается здесь, чтобы выделить механизм.
<?php namespace App\Services;
use Illuminate\Support\Collection;
use Illuminate\Pagination\BootstrapThreePresenter;
use Illuminate\Pagination\LengthAwarePaginator as BasePaginator;
class Paginator extends BasePaginator{
/**
* Create a new paginator instance.
*
* @param mixed $items
* @param int $perPage
* @param string $path Base path
* @param int $page
* @return void
*/
public function __construct($items, $perPage, $path, $page){
// Set the "real" items that will appear here
$trueItems = [];
// That is, add the correct items
for ($i = $perPage*($page-1) ; $i < min(count($items),$perPage*$page) ; $i++){
$trueItems[] = $items[$i];
}
// Set path as provided
$this->path = $path;
// Call parent
parent::__construct($trueItems,count($items),$perPage);
// Override "guessing" of page
$this->currentPage = $page;
}
/**
* Get a URL for a given page number.
*
* @param int $page
* @return string
*/
public function url($page){
if ($page <= 0) $page = 1;
return $this->path.$page;
}
}
Чтобы использовать класс, вы можете определить маршрут,
Route::get('items/{page}','[email protected]');
Затем в указанном контроллере, в getElements
:
$items = new Paginator(Model::all(),$numberElementsPerPage,url('items'),$page);
Затем вы можете выбрасывайте элементы, как вы обычно будет. Примечание. Я добавил путь, чтобы интегрировать более сложные проекты с узором. Надеюсь, это поможет!
Не могли бы вы использовать 'mod_rewrite' для преобразования URL-адрес правильной строки запроса? Преобразовать его внутренне в 'localhost/ads? Page = 1'. –
@BenHarold Конечно, это сработает для перенаправления ссылок. Однако, я думаю, это не изменит проблему генерации ссылок. – repptilia