Спростимо умовну логіку за допомогою 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

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

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

Logomark Logotype

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

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

Logomark Logotype

Створення MCP-серверів на PHP

Модельний контекстний протокол (MCP) відкриває нові горизонти в інтеграції AI-додатків з PHP. Дізнайтеся, як легко створити сервер, що відповідає MCP, та які можливості відкриваються для вашого проєкту