Спростимо умовну логіку за допомогою Fluent Conditionable Trait у Laravel

Перекладено ШІ 0 Laravel News 24 травня, 2025

Ларавел не тільки спрощує роботу з кодом, але й надає новий рівень читабельності завдяки трейту Conditionable. Досліджуйте, як ця функція змінює традиційні умови в коді на більш зрозумілі та інтуїтивно зрозумілі конструкції, які покращують вашу розробку!

Laravel підвищує читабельність коду, додаючи trait Conditionable до класу Fluent. Це дозволяє розробникам виконувати умовні операції через зручний інтерфейс, зберігаючи ланцюги викликів методів без порушення логіки виконання коду.

Trait Conditionable дозволяє виконувати операції умовно за допомогою методів when() і unless(), перетворюючи традиційні if-else на виразний, майже природний код. Такий підхід акцентує увагу на читабельності, зберігаючи елегантність функцій.

Розгляньмо різницю між традиційним та флент-підходом:

Традиційна логіка умов:

$config = Fluent::make([
    'app_name' => 'TaskManager',
    'debug_mode' => true,
    'features' => 12,
]);
 
if (auth()->isPremium()) {
    $config = $config->set('tier', 'premium');
} else {
    $config = $config->forget('features');
}

Флент-логіка умов:

$config = Fluent::make([
    'app_name' => 'TaskManager',
    'debug_mode' => true,
    'features' => 12,
])->when(auth()->isPremium(), function (Fluent $input) {
    return $input->set('tier', 'premium');
})->unless(auth()->isPremium(), function (Fluent $input) {
    return $input->forget('features');
});

Флент-підхід зберігає логіку виконання, не перериваючи ланцюг методів. Він звучить природно: "Створити об'єкт Fluent з цими властивостями; якщо користувач преміум, додати преміум-тариф; якщо ні — прибрати кількість функцій."

Цей підхід особливо цінний при підготовці складних структур даних:

use Illuminate\Support\Fluent;
 
class ProductResource
{
    public function toArray($request)
    {
        $product = $this->resource;
 
        return Fluent::make([
            'id' => $product->id,
            'name' => $product->name,
            'price' => $product->price,
            'available_since' => $product->created_at->toDateString(),
        ])
            ->when($request->user()->can('view-analytics'), function (Fluent $data) use ($product) {
                return $data->set('view_count', $product->views()->count())
                            ->set('purchase_count', $product->orders()->count());
            })
            ->when($product->isOnSale(), function (Fluent $data) use ($product) {
                return $data->set('sale_price', $product->sale_price)
                            ->set('discount_percentage', $product->discount_rate);
            })
            ->unless($request->includesSensitiveData(), function (Fluent $data) {
                return $data->forget('cost_price')
                            ->forget('supplier_info');
            })
            ->when($product->hasReviews(), function (Fluent $data) use ($product) {
                return $data->set('average_rating', $product->averageRating())
                            ->set('review_count', $product->reviews()->count());
            })
            ->toArray();
    }
}

Такий підхід дає змогу умовно формувати дані відповіді залежно від прав доступу, стану продукту та параметрів запиту, зберігаючи логіку та читаємість коду. Кожна умова ясно передає своє призначення, не перериваючи логічну послідовність виконання.

Trait Conditionable спрощує складну умовну логіку, перетворюючи її на зрозумілий і підтримуваний код, що чітко передає намір і зменшує когнітивне навантаження на розробників, які читають та підтримують кодову базу

Популярні

Інше, що варто прочитати

15 Оновлено 02 червня, 2026

Intervention Image: потужний інструмент для роботи з зображеннями у Laravel

Досліджуйте потужний пакет Intervention Image для PHP, який виводить редагування зображень на новий рівень з оновленою версією 3. Чи готові ви дізнатися, які нові можливості та функції чекають на вас у цьому інструменті

11 Оновлено 02 червня, 2026

Управління доступом у Filament за допомогою плагіна Shield

Дізнайтеся, як пакет Filament Shield забезпечує управління доступом до ваших панелей, ресурсів і віджетів у Laravel. Ця стаття розкриває основні можливості пакету, включаючи просту установку та підтримку багатокористувацьких середовищ — не пропустіть!

49 Оновлено 02 червня, 2026

Nuxt 3 + Laravel Sanctum: Просте та надійне рішення для автентифікації вашого SPA та API

У сучасній веб-розробці аутентифікація є ключовою для захисту додатків і даних користувачів. Дізнайтеся, як модуль nuxt-sanctum-authentication спростить інтеграцію між Nuxt 3 та Laravel Sanctum, забезпечуючи надійний і зручний спосіб реалізації аутентифікації для вашого проєкту