---
title: "Chain of Responsibility - ланцюжок обробників"
url: https://laravelukraine.com/blog/chain-of-responsibility-lanciuzok-obrobnikiv
author: "Олексій Бабінцев"
date: 2026-07-08
---

# Chain of Responsibility - ланцюжок обробників

Chain of Responsibility передає запит ланцюжком обробників: кожен або обробляє його, або передає далі.

### Яку проблему вирішує

Коли запит має пройти кілька перевірок чи кроків обробки, вшивання їх в один метод дає громіздкий `if`-каскад, який важко перевпорядкувати чи розширити.

### Як вирішує

Кожен крок - окремий обробник зі спільним інтерфейсом. Обробники вишиковуються в ланцюг; кожен робить свою частину й передає результат далі (або зупиняє ланцюг). Додати, прибрати чи переставити крок - локальна зміна.

Нижче спрощений варіант; у реальних сценаріях у Laravel зручніше використовувати `Pipeline` (див. окремий патерн) або передавати handler далі явно.

```php
interface Handler
{
  public function handle(array $payload): array;
}

class SanitizeInput implements Handler
{
  public function handle(array $payload): array
  {
    $payload['email'] = strtolower($payload['email']);
    return $payload;
  }
}

class ValidateEmail implements Handler
{
  public function handle(array $payload): array
  {
    if (!filter_var($payload['email'], FILTER_VALIDATE_EMAIL)) {
      throw new InvalidArgumentException('Invalid email');
    }
    return $payload;
  }
}

$payload = (new SanitizeInput())->handle($payload);
$payload = (new ValidateEmail())->handle($payload);
```

### Де застосовувати

- Послідовні валідатори, конвеєри обробки запиту, фільтри.
- Скрізь, де набір кроків змінюється або має конфігуруватися порядок.

### Плюси та мінуси

- **+** Кроки незалежні; порядок легко змінювати та розширювати.
- **+** Кожен обробник відповідає за одну річ і тестується окремо.
- **−** Запит може "провалитися" крізь ланцюг, якщо ніхто його не обробив.
- **−** Розкидана логіка ускладнює відстеження повного шляху запиту.
