Сохранение GET-параметров при пагинации в Laravel
Часто список не просто листают, а ещё и фильтруют: поиск по названию, сортировка, категория. В URL тогда несколько параметров, например:
/posts?search=php&page=2.
Обычные ссылки пагинации меняют
только page. Параметр
search при переходе на
другую страницу может пропасть -
и фильтр сбросится. Чтобы этого
не было, к пагинатору вызывают
withQueryString:
<?php
namespace App\Http\Controllers;
use App\Models\Post;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function index(Request $request)
{
$query = Post::query();
if ($request->filled('search')) {
$query->where(
'title',
'like',
'%' . $request->search . '%'
);
}
$posts = $query->paginate(10)
->withQueryString();
return view('posts.index', [
'posts' => $posts,
]);
}
}
?>
Теперь в ссылках links()
останутся и search, и
page. Пользователь листает
результаты поиска, а не весь список
заново.
Сделайте список с поиском
по GET-параметру search
и пагинацией через
withQueryString.
Откройте вторую страницу
с поиском и проверьте, что
параметр search
остаётся в ссылках.