Спростимо умовну логіку за допомогою 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 спрощує складну умовну логіку, перетворюючи її на зрозумілий і підтримуваний код, що чітко передає намір і зменшує когнітивне навантаження на розробників, які читають та підтримують кодову базу

Популярні

Logomark Logotype

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

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

Logomark Logotype

Використання повнотекстового пошуку в Laravel

Laravel пропонує потужні можливості повнотекстового пошуку за допомогою методів whereFullText та orWhereFullText, що дозволяють здійснювати складні запити до бази даних. Дізнайтеся, як реалізувати ефективний пошук для вашого блогу чи системи управління контентом

Logomark Logotype

Як задокументувати кілька API в Laravel за допомогою Scramble

Ви знали, що в одному додатку Laravel можна реалізувати кілька API? У нашій статті ви дізнаєтеся, як за допомогою Scramble легко документувати різні версії API та налаштувати доступ до документації, щоб зробити її публічною або приватною. Читайте далі, щоб дізнатися більше