Спростіть генерацію URL за допомогою нового методу query() у Laravel

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 09 квітня, 2025
Laravel пропонує елегантний підхід до генерації URL з параметрами запиту через новий метод query. Досліджте, як цей метод спрощує створення складних URL, зменшуючи повторення коду та помилки у статті

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() у вашій програмі створює більш підтримувану кодову базу, усуваючи типові помилки, такі як неправильне кодування параметрів або випадкове перезаписування існуючих рядків запиту

Популярні

Logomark Logotype

Створення CLI-додатка за допомогою Laravel та Docker

Зазирніть у світ Laravel, де потужний CLI-фреймворк відкриває нові можливості для розробки командного інтерфейсу. Дізнайтеся, як створити просту утиліту для перевірки акцій, яка працює з Docker, та які переваги це може принести у вашому проєкті!

Logomark Logotype

Усе, що нам відомо про Livewire 4

Нова версія Livewire 4, представленої Келебом Порзіо на Laracon US 2025, обіцяє значні покращення у швидкості та організації компонентів. Які з інноваційних функцій підкорять ваше серце? Читайте далі, щоб дізнатися більше про те, як Livewire 4 полегшить вашу роботу

Logomark Logotype

Використання повнотекстового пошуку в Laravel

Laravel пропонує потужні можливості повнотекстового пошуку за допомогою методів whereFullText та orWhereFullText, що дозволяють здійснювати складні запити до бази даних. Дізнайтеся, як реалізувати ефективний пошук для вашого блогу чи системи управління контентом