Laravel покращує управління пайплайнами завдяки запровадженню методу finally, який пропонує елегантніший спосіб обробки операцій після виконання пайплайну, незалежно від результату — успіху чи невдачі
Раніше для управління операціями очищення в пайплайнах Laravel потрібно було обгортати логіку пайплайнів в блоки try-finally. Новий метод finally інтегрує очищення безпосередньо в ланцюг пайплайна, створюючи більш зрозумілий і підтримуваний код:
$result = Pipeline::send($order)
->through([StepOne::class, StepTwo::class])
->finally(fn () => /** виконати очищення */)
->then(fn () => $order->process());
Цей підхід особливо ефективний у складних операціях, де важливо гарантовано здійснити очищення ресурсів:
class OrderProcessor
{
public function process(Order $order)
{
return Pipeline::send($order)
->through([
ValidateInventory::class,
CalculateShipping::class,
ProcessPayment::class,
UpdateInventory::class
])
->finally(function () use ($order) {
// Завжди звільняємо резервування товару
InventoryManager::releaseHolds($order->id);
// Очищаємо блокування процесу
Cache::forget("order-processing:{$order->id}");
// Оновлюємо часову мітку статусу замовлення
$order->update(['processed_at' => now()]);
// Надсилаємо сповіщення незалежно від результату
event(new OrderProcessingCompleted($order));
})
->then(fn () => $this->completeOrder($order));
}
protected function completeOrder(Order $order)
{
return [
'status' => 'processed',
'order_id' => $order->id,
'total' => $order->total
];
}
}
Метод finally має кілька переваг над традиційними блоками try-finally. Він дозволяє зберігати логіку очищення в потоці пайплайна, створюючи більш природний прогрес коду, який легше зрозуміти. Цей підхід є особливо цінним при обробці складних операцій, що вимагають належного управління ресурсами