Елегантна обробка вкладених масивів за допомогою допоміжної функції fluent() у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 20 червня, 2025
Laravel пропонує функцію допомоги fluent(), яка спрощує роботу з багатовимірними масивами, дозволяючи інтуїтивно отримувати доступ до вкладених структур даних. Досліджуйте, як ця нова можливість зробить вашу роботу з масивами ще ефективнішою

Laravel запроваджує функцію-утиліту fluent() для зручнішої роботи з мультимірними масивами, пропонуючи інтуїтивний спосіб доступу та маніпуляцій з вкладеними структурами даних

Використання fluent-утиліти для роботи з мультимірними масивами виглядає так:

$config = [
    'app' => [
        'name' => 'TaskManager',
        'settings' => [
            'timezone' => 'UTC',
            'locale' => 'en',
        ]
    ],
    'features' => [
        ['name' => 'Analytics'],
        ['name' => 'Reports']
    ]
];
 
fluent($config)->app;
fluent($config)->get('app.name');
fluent($config)->collect('features')->pluck('name');
fluent($config)->scope('app.settings')->toJson();

Ось практичний варіант реалізації для побудови відповіді API:

class ApiResponseBuilder extends Controller
{
    public function buildResponse(Product $product)
    {
        $responseData = [
            'product' => [
                'details' => [
                    'title' => $product->title,
                    'price' => $product->price,
                    'created' => $product->created_at
                ],
                'options' => [
                    'variants' => $product->variant_settings,
                    'shipping' => $product->shipping_options
                ]
            ],
            'metrics' => [
                'views' => $product->views->count(),
                'orders' => $product->orders->count(),
                'reviews' => $product->reviews->count()
            ]
        ];
 
        $response = fluent($responseData);
 
        return response()->json([
            'title' => $response->get('product.details.title'),
            'price' => $response->get('product.details.price'),
            'shipping' => $response->get('product.options.shipping'),
            'analytics' => $response->scope('metrics')->toArray(),
            'variants' => $response
                ->collect('product.options.variants')
                ->filter(fn($available) => $available)
                ->keys()
        ]);
    }
}

Утиліта fluent значно спрощує читання та обслуговування складних операцій з масивами