Метод withQueryString
Метод withQueryString класса WithPagination определяет,
должен ли номер текущей страницы сохраняться в параметре запроса URL.
По умолчанию Livewire автоматически добавляет параметр page в адресную строку
при использовании пагинации. Этот метод позволяет явно указать это поведение
или изменить имя параметра запроса. Он вызывается в методе bootWithPagination
или непосредственно в компоненте для настройки синхронизации.
Синтаксис
<?php
use Livewire\WithPagination;
class Users extends Component
{
use WithPagination;
public function boot()
{
$this->withQueryString('custom_page');
}
}
?>
Метод принимает один необязательный параметр - строку с именем параметра запроса,
которое будет использоваться для хранения номера страницы. Если параметр не передан,
используется значение по умолчанию page.
Пример
Давайте настроим компонент со списком пользователей, чтобы номер страницы
сохранялся в URL с параметром page:
<?php
namespace App\Livewire;
use Livewire\Component;
use Livewire\WithPagination;
use App\Models\User;
class Users extends Component
{
use WithPagination;
public function render()
{
$users = User::paginate(10);
return view('livewire.users', ['users' => $users]);
}
}
?>
<div>
@foreach ($users as $user)
<p>{{ $user->name }}</p>
@endforeach
{{ $users->links() }}
</div>
Результат выполнения кода:
<div>
<p>John Doe</p>
<p>Jane Smith</p>
<!-- ... -->
<nav>
<ul>
<li><a href="?page=2">2</a></li>
<li><a href="?page=3">3</a></li>
</ul>
</nav>
</div>
Теперь при переходе на вторую страницу URL будет содержать ?page=2.
При обновлении страницы пользователь останется на той же странице.
Пример
Давайте изменим имя параметра запроса на p с помощью метода withQueryString:
<?php
namespace App\Livewire;
use Livewire\Component;
use Livewire\WithPagination;
use App\Models\Product;
class Products extends Component
{
use WithPagination;
public function boot()
{
$this->withQueryString('p');
}
public function render()
{
$products = Product::paginate(5);
return view('livewire.products', ['products' => $products]);
}
}
?>
<div>
@foreach ($products as $product)
<p>{{ $product->name }}</p>
@endforeach
{{ $products->links() }}
</div>
Результат выполнения кода:
<div>
<p>Product A</p>
<p>Product B</p>
<!-- ... -->
<nav>
<ul>
<li><a href="?p=2">2</a></li>
<li><a href="?p=3">3</a></li>
</ul>
</nav>
</div>
Теперь параметр страницы в URL будет отображаться как ?p=2 вместо стандартного ?page=2.
Пример
Давайте используем метод withQueryString для отключения синхронизации
с URL, передав в него пустую строку:
<?php
namespace App\Livewire;
use Livewire\Component;
use Livewire\WithPagination;
use App\Models\Post;
class Posts extends Component
{
use WithPagination;
public function boot()
{
$this->withQueryString('');
}
public function render()
{
$posts = Post::paginate(3);
return view('livewire.posts', ['posts' => $posts]);
}
}
?>
<div>
@foreach ($posts as $post)
<p>{{ $post->title }}</p>
@endforeach
{{ $posts->links() }}
</div>
Результат выполнения кода:
<div>
<p>Post 1</p>
<p>Post 2</p>
<p>Post 3</p>
<nav>
<ul>
<li><a href="#">2</a></li>
<li><a href="#">3</a></li>
</ul>
</nav>
</div>
Теперь при переходе между страницами параметр в URL не добавляется. Страница всегда будет отображаться с текущим номером без параметра в адресной строке.
Смотрите также
-
трейт
WithPagination,
который добавляет функциональность пагинации -
метод
resetPage,
который сбрасывает текущую страницу на первую -
метод
setPage,
который устанавливает конкретный номер страницы -
раздел
работа с параметрами запроса,
в котором описана настройка синхронизации свойств с URL