Метод appends
Метод appends класса LengthAwarePaginator применяется к объекту пагинации и позволяет добавить произвольные параметры к URL-адресам страниц. В качестве аргумента метод принимает массив ключ-значение, где ключ - имя параметра, а значение - его содержимое. Данные параметры будут добавлены ко всем ссылкам пагинации, включая ссылки на предыдущую и следующую страницы.
Синтаксис
<?php
$paginator->appends($array);
?>
Пример
Давайте добавим параметр фильтрации 'category' в ссылки пагинации:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
use IlluminateHttpRequest;
class ArticleController extends Controller
{
public function index(Request $request)
{
$category = $request->input('category', 'all');
$articles = Article::where('category', $category)->paginate(10);
$articles->appends(['category' => $category]);
return view('articles.index', ['articles' => $articles]);
}
}
?>
Результат выполнения кода в Blade-шаблоне:
<div>
@foreach ($articles as $article)
<p>{{ $article->title }}</p>
@endforeach
{{ $articles->links() }}
</div>
Результат в HTML при текущей странице 2:
<div>
<p>article 1</p>
<p>article 2</p>
<!-- ... -->
<nav>
<ul>
<li><a href="?page=1&category=science">1</a></li>
<li><a href="?page=2&category=science" class="active">2</a></li>
<li><a href="?page=3&category=science">3</a></li>
</ul>
</nav>
</div>
Пример
Давайте добавим несколько параметров одновременно, включая сортировку и поиск:
<?php
namespace AppHttpControllers;
use AppModelsUser;
use IlluminateHttpRequest;
class UserController extends Controller
{
public function index(Request $request)
{
$query = User::query();
if ($request->has('search')) {
$query->where('name', 'like', '%' . $request->search . '%');
}
if ($request->has('sort')) {
$query->orderBy($request->sort, $request->direction ?? 'asc');
}
$users = $query->paginate(15);
$users->appends([
'search' => $request->search,
'sort' => $request->sort,
'direction' => $request->direction
]);
return view('users.index', ['users' => $users]);
}
}
?>
Результат выполнения кода при текущей странице 1:
<nav>
<ul>
<li><a href="?page=2&search=john&sort=name&direction=asc">2</a></li>
<li><a href="?page=3&search=john&sort=name&direction=asc">3</a></li>
</ul>
</nav>
Пример
Метод appends можно использовать для сохранения всех текущих параметров запроса с помощью метода all:
<?php
namespace AppHttpControllers;
use AppModelsProduct;
use IlluminateHttpRequest;
class ProductController extends Controller
{
public function index(Request $request)
{
$products = Product::paginate(20);
$products->appends($request->all());
return view('products.index', ['products' => $products]);
}
}
?>
Результат выполнения кода с текущими параметрами:
<nav>
<ul>
<li><a href="?page=2&color=red&size=l&brand=nike">2</a></li>
<li><a href="?page=3&color=red&size=l&brand=nike">3</a></li>
</ul>
</nav>
Смотрите также
-
метод
links,
который выводит ссылки пагинации -
метод
withQueryString,
который автоматически добавляет все параметры запроса -
метод
fragment,
который добавляет якорь к ссылкам пагинации -
метод
url,
который генерирует URL для конкретной страницы