Оптимізація дій за допомогою Fluent Class у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 19 квітня, 2025
Вам цікаво, як покращити обробку даних у вашому Laravel-додатку? У нашому новому блозі ми розглянемо переваги використання класу Fluent для спрощення валідації та елегантного перетворення даних. Читайте далі, щоб дізнатися, як цей підхід може змінити вашу кодову базу!

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

Хоча масиви забезпечують простий спосіб передачі даних до дій, екземпляри Fluent пропонують зручні методи трансформації та елегантні варіанти валідації. Це особливо корисно під час роботи зі складними даними або реалізації умовної логіки валідації.

Ось базова реалізація:

namespace App\Actions;
 
use App\Models\Product;
use Illuminate\Support\Fluent;
 
class CreateProduct
{
    // Використовуючи Fluent замість масиву
    public function execute(Fluent $data): Product
    {
        return Product::create([
            'name' => $data->name,
            'description' => $data->description,
            'categories' => $data->array('categories'),
            'status' => $data->enum('status', ProductStatus::class),
            'published_at' => $data->date('published_at')
        ]);
    }
}
 
// Використання в тестах
it('can create a new product', function() {
    $product = (new CreateProduct)->execute(new Fluent([
        'name' => 'Преміум навушники',
        'description' => 'Бездротові навушники з шумозаглушенням',
        'categories' => ['електроніка', 'аудіо'],
        'status' => ProductStatus::Active,
        'published_at' => now()
    ]));
});

Підхід Fluent особливо вражає під час реалізації складної валідації з умовними правилами:

class PaymentValidator
{
    public function validate(array $data)
    {
        $validator = Validator::make($data, [
            'method' => 'required|string',
            'amount' => 'required|numeric|min:1'
        ]);
 
        $validator->sometimes(
            ['account_name', 'routing_number'],
            'required',
            function (Fluent $input) {
                return $input->method === 'bank_transfer';
            }
        );
 
        $validator->sometimes(
            'card_verification',
            'required|size:3',
            function (Fluent $input) {
                return $input->get('method') === 'credit_card' &&
                    $input->get('amount') > 500;
            }
        );
 
        return $validator;
    }
}

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