WEB -
Перемкнути навігацію

Мова

  • Українська
  • Русский
  • Polski

Введіть щонайменше 3 символів для пошуку.

  • Українська
  • Русский
  • Polski
Підтримати проєкт

Пошук

Введіть щонайменше 3 символів для пошуку.

Книги
  • Книги
  • PHP
  • JavaScript
  • HTML і CSS
  • SQL і мови запитів
  • Дизайн
  • WordPress
  • SEO
  • Python
  • Інші теми
  • Laravel
  • Без категорії
  • Статті
  • Laravel
  • WordPress
  • Підтримати проєкт
  • © 2015-2026 Andrii Beznosko

  • Our partner

Розширюємо класи Laravel методом `orAbort` за допомогою трейту

  • Опис
  • Опис/Завантаження

Розширюємо класи Laravel методом orAbort за допомогою трейту

Іноді в Laravel ми пишемо однаковий шаблон: намагаємося отримати модель або одразу зупиняємо виконання з потрібним HTTP-кодом. Це працює, але код стає менш читабельним, а логіка розкидається по всьому проєкту. Вихід — винести повторюваний патерн у невеликий, акуратний трейт.

Вдохновившись підходом з Edd Man’s про опціональні управляючі потоки, я створив невеликий пакет для Laravel, який реалізує опціональну зупинку застосунку. Його ідея проста: якщо метод повернув «нічого» (наприклад, false), викликаємо abort() з потрібним статусом.

Пакет доступний на GitHub: spatie/laravel-or-abort. Він надає трейт SpatieOrAbortOrAbort, який можна підключити до будь-якого класу. Після підключення всі методи класу отримують додаткову поведінку: до них додається можливість викликати orAbort.

Навіщо це потрібно: прибираємо повторювані конструкції

Зазвичай ми робимо таке:

$article = $articleRepository->find($articleId) ?: abort(404);

Це коротко, але при масштабуванні проєкту такі вирази починають повторюватися в багатьох місцях. Крім того, логіка «якщо не знайдено — зупини» стає менш очевидною для читача.

З трейтом orAbort той самий сценарій перетворюється на читабельний виклик:

$article = $articleRepository->findOrAbort($articleId);

Тепер чітко видно намір: ми шукаємо, а якщо результату немає — одразу зупиняємо застосунок.

Як задати власний HTTP-код

За замовчуванням використовується код 404. Але інколи потрібно зупинити застосунок з іншим статусом — наприклад, 500 або 403. Для цього достатньо передати другий параметр:

$article = $articleRepository->findOrAbort($articleId, 500);

Якщо метод репозиторію поверне false, Laravel зупинить виконання через abort(500).

Підключення пакета та приклад використання

Щоб почати, встановіть пакет через Composer:

composer require spatie/laravel-or-abort

Далі підключіть трейт у ваш клас (наприклад, у репозиторій). Після цього ви зможете викликати методи у форматі findOrAbort, getOrAbort тощо — залежно від імен ваших оригінальних методів.

<?php

use SpatieOrAbortSpatieOrAbortOrAbort;

class ArticleRepository
{
    use SpatieOrAbortOrAbort;

    public function find($id)
    {
        // Повертає модель або false
    }
}

Тоді використання виглядатиме так:

$article = $articleRepository->findOrAbort($articleId);

Або з іншим кодом:

$article = $articleRepository->findOrAbort($articleId, 403);

Важливі нюанси

Трейт orAbort працює завдяки магічному методу __call. Це означає, що він перехоплює виклики методів, яких напряму не існує в класі, і додає потрібну поведінку.

Не використовуйте цей трейт у класах, які вже реалізують власний __call. Інакше можуть виникнути конфлікти або непередбачувана поведінка.

Підсумок

Трейт SpatieOrAbortOrAbort допомагає зробити код Laravel більш охайним: замість тернарних конструкцій і ?: abort() ви отримуєте зрозумілі методи виду findOrAbort. Це покращує читабельність, концентрує логіку зупинки в одному місці та дозволяє швидко керувати HTTP-кодом.

Ознайомитися з реалізацією можна на GitHub.

Коментарі

Всього коментарів: 0

Залишити коментар Скасувати відповідь

Ваш email не буде опубліковано.

Категорія: Главная » Laravel » Розширюємо класи Laravel методом `orAbort` за допомогою трейту
Статус: For advanced readers
Посилання на оригінальну статтю (якщо вказано або стаття не є нашою) Завантажити
Додав Кві 17, 2026 00:21 Andriy

Статті, опубліковані на WEB-Программист, містять посилання на джерела. Адміністрація сайту не несе відповідальності за використання цих матеріалів.

Дивіться також:

Створення пакетів для Laravel

Prosper Otemuyiwa нещодавно написав статтю про те, як створювати пакети для Laravel 5 у своєму блозі. Хоча його спосіб абсолютно правильний і може вам підійти, я віддаю перевагу трохи іншому підходу до створення пакетів. Спочатку я створю новий репозиторій на...

DDD Ultra-Light

[caption id="attachment_547" align="aligncenter" width="891"] Laravel 4.2[/caption] DDD Ultra-Light: як застосувати Domain-Driven Design без зайвих витрат Деякі команди вважають Domain-Driven Design (DDD) складним, дорогим і таким, що потребує обережного впровадження. І справді: якщо підходити до DDD як до «великого проєкту перебудови»,...

Робота з nullable-полями в Eloquent у Laravel

Вступ Якщо у вас є кілька моделей у Laravel з одним nullable-полем, створення мутатора для цього поля — процес доволі тривіальний: public function setNicknameAttribute($nickname) { $this->attributes['nickname'] = trim($nickname) == '' ? null : trim($nickname); }   Тут ми перевіряємо вхідні...

Зв'яжіться з нами

- Преміум теми та плагіни WP Star безкоштовно -

Підтримати автора

Налаштування cookie

Ми використовуємо необов’язкові аналітичні cookie, щоб розуміти, які матеріали корисні. Ви можете продовжити без аналітики.

Ви можете змінити свій вибір у будь-який час.