Laravel: Прив'язка маршрутів з обмеженнями для керування вкладеними ресурсами

0
Перекладено ШІ
Оригінал: Laravel News
Оновлено: 26 липня, 2025
Laravel пропонує революційний підхід до роботи з вкладеними ресурсами завдяки автоматичній валідації зв'язків між батьками і дітьми. Хочете дізнатися, як це спростить створення безпечних та зрозумілих URL-структур? Читайте далі

Scoped implicit model binding у Laravel змінює підходи розробників до роботи з вкладеними ресурсами, автоматично забезпечуючи зв'язки між батьківськими і дочірніми елементами. Ця функція усуває потребу в ручній перевірці, покращуючи структуру URL для ієрархічних даних.

Метод scoped дозволяє автоматичну валідацію зв'язків під час визначення вкладених маршрутів:

use App\Http\Controllers\OrderItemController;

Route::resource('orders.items', OrderItemController::class)->scoped([
    'item' => 'sku',
]);

Ця конфігурація створює URL-адреси у форматі /orders/{order}/items/{item:sku}, де Laravel автоматично перевіряє, що кожен товар належить до свого заданого замовлення.

Laravel використовує правила наіменування для визначення зв'язків між моделями. Фреймворк вважає, що модель батька має метод зв'язку, що відповідає назві параметра маршруту у множині. Коли запит робиться до /orders/123/items/ABC789, Laravel здійснює запит до зв'язку items у моделі Order, щоб знайти товар зі SKU "ABC789".

Яскравий приклад цієї функціональності — створення системи управління запасами для електронної комерції:

Route::resource('warehouses.products', WarehouseProductController::class)->scoped([
    'product' => 'barcode',
]);

class Warehouse extends Model
{
    public function products()
    {
        return $this->hasMany(Product::class);
    }
}

class Product extends Model
{
    public function warehouse()
    {
        return $this->belongsTo(Warehouse::class);
    }
}

class WarehouseProductController extends Controller
{
    public function edit(Warehouse $warehouse, Product $product)
    {
        return view('inventory.edit', compact('warehouse', 'product'));
    }

    public function update(Warehouse $warehouse, Product $product, Request $request)
    {
        $product->update($request->validated());
        return redirect()->route('warehouses.products.show', [$warehouse, $product]);
    }
}

Фреймворк автоматично повертає 404 помилки, якщо спробувати отримати доступ до товарів, які не існують у заданому складі. Структура URL /warehouses/east-coast/products/BAR123456 гарантує цілісність даних без додаткової логіки контролера, при цьому зберігаючи чисті й зрозумілі маршрути

Популярні

Logomark Logotype

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення

Logomark Logotype

Перетворення даних у типобезпечні DTO за допомогою пакету Data Model

Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю

Logomark Logotype

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

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