Laravel пропонує елегантніший підхід до генерації URL з параметрами запиту за допомогою нового методу query()
. Цей спеціалізований API спрощує створення складних URL з рядками запиту, зменшуючи кількість повторюваного коду та можливі помилки.
// Генерує: http://localhost/products?sort=-name
url()->query('products', ['sort' => '-name']);
Метод query()
приймає базовий шлях як перший аргумент та масив параметрів запиту як другий, обробляючи всі складнощі їх правильного поєднання та кодування у завершений URL.
// Прості пари ключ-значення
// http://localhost/products?sort=-name
url()->query('products', ['sort' => '-name']);
// Масиви як параметри (для фільтрів, колонок тощо)
// http://localhost/products?columns[0]=name&columns[1]=price&columns[2]=quantity
url()->query('products', ['columns' => ['name', 'price', 'quantity']]);
// Перезаписування існуючих параметрів
// http://localhost/products?sort=-price
url()->query('products?sort=-name', ['sort' => '-price']);
// Додавання параметрів до існуючих
// http://localhost/products?sort=-name&search=samsung
url()->query('products?sort=-name', ['search' => 'samsung']);
Цей метод особливо корисний при реалізації функцій, які потребують складних фільтрацій та сортировок. Наприклад, під час створення каталогу продуктів із динамічним фільтром:
class ProductController extends Controller
{
public function index(Request $request)
{
$products = Product::query();
// Застосування фільтрів на основі параметрів запиту
if ($request->has('category')) {
$products->where('category_id', $request->category);
}
// Застосування сортування
if ($request->has('sort')) {
$sort = $request->sort;
$direction = str_starts_with($sort, '-') ? 'desc' : 'asc';
$column = ltrim($sort, '-');
$products->orderBy($column, $direction);
}
$products = $products->paginate(20);
// Генерування URL наступної сторінки з усіма поточними фільтрами
$nextPageUrl = null;
if ($products->hasMorePages()) {
$params = $request->query();
$params['page'] = $products->currentPage() + 1;
$nextPageUrl = url()->query('products', $params);
}
return view('products.index', [
'products' => $products,
'nextPageUrl' => $nextPageUrl,
'filterUrl' => function($newParams) use ($request) {
// Генерація URL для фільтрів, зберігаючи інші параметри
$params = array_merge($request->query(), $newParams);
return url()->query('products', $params);
}
]);
}
}
Регулярне використання методу query()
у вашій програмі створює більш підтримувану кодову базу, усуваючи типові помилки, такі як неправильне кодування параметрів або випадкове перезаписування існуючих рядків запиту