- Блог
- Оптимізація маршрутів за допомогою бульбашкової архітектури ресурсів Laravel
Оптимізація маршрутів за допомогою бульбашкової архітектури ресурсів Laravel
Оновлено: 01 серпня, 2025
Використання поверхневої маршрутизації в Laravel дозволяє спростити URL без втрати логічних зв'язків між батьківськими та дочірніми ресурсами. Як це нововведення може полегшити вашу роботу та оптимізувати структуру маршрутів? Читайте далі, щоб дізнатися більше про переваги, які воно пропонує
Шаблон ресурсного маршруту в Laravel спрощує URL, усуваючи зайву складність, та підтримує логічні зв’язки між батьківськими та дочірніми ресурсами. Цей архітектурний підхід оптимізує API-ендпоінти, позбавляючи від зайвих батьківських ідентифікаторів, які не додають цінності.
Традиційні структури вкладених ресурсів формують громіздкі URL, які можуть бути незручними:
```php
use App\Http\Controllers\OrderItemController;
Route::resource('orders.items', OrderItemController::class);
```
Стандартне вкладення створює маршрути, які вимагають вказувати як батьківський, так і дочірній ідентифікатор на всіх етапах, навіть якщо дочірній ресурс можна ідентифікувати самостійно.
Шаблон поверхневого маршруту спрощує цю схему, зберігаючи контекст батька лише там, де це необхідно:
```php
use App\Http\Controllers\OrderItemController;
Route::resource('orders.items', OrderItemController::class)->shallow();
```
Це генерує оптимізовані маршрути, де операції з окремими ресурсами проходять без зайвих посилань на батьківський ресурс, при цьому зберігаючи відношення батька для колекційних дій.
Приклад системи управління запасами продемонструє практичні переваги поверхневого маршруту в різних контекстах:
```php
Route::resource('warehouses.products', ProductController::class)->shallow();
class ProductController extends Controller
{
public function index($warehouseId)
{
$warehouse = Warehouse::findOrFail($warehouseId);
return ProductResource::collection($warehouse->products);
}
public function store(Request $request, $warehouseId)
{
$warehouse = Warehouse::findOrFail($warehouseId);
$product = $warehouse->products()->create($request->validated());
return new ProductResource($product);
}
public function update(Request $request, $id)
{
$product = Product::findOrFail($id);
$product->update($request->validated());
return new ProductResource($product->fresh());
}
public function destroy($id)
{
$product = Product::findOrFail($id);
$product->delete();
return response()->noContent();
}
}
```
Підхід поверхневого маршруту дозволяє очищати методи контролера, зберігаючи цілісність даних. Операції з окремими продуктами працюють безпосередньо з їх ідентифікаторами, що знижує складність URL і покращує зручність API без втрати логічної структури відносин батька та дитини.