Спрощення масивів конфігурації в Laravel за допомогою Config::collection()

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

У Laravel 12 змінили підхід до роботи з конфігураційними масивами. Тепер метод Config::collection() повертає масиви безпосередньо як екземпляри Collection, без необхідності обгортати їх у collect().

Раніше потрібно було виконувати два окремі виклики:

$services = collect(Config::array('services'));
$connections = collect(Config::array('database.connections'));

Новий метод усуває цю зайву дію:

$services = Config::collection('services');
$connections = Config::collection('database.connections');

Це відповідає іншим типізованим конфігураційним методам Laravel, таким як Config::string() та Config::integer(). Хоча різниця невелика, вона суттєва при регулярній роботі з конфігураційними масивами.

Ось система сповіщень, яка обробляє різні конфігурації служб:

<?php

namespace App\Services;

use Illuminate\Support\Facades\Config;

class NotificationManager
{
    public function getActiveChannels(): array
    {
        return Config::collection('notifications.channels')
            ->filter(fn($config) => $config['active'] === true)
            ->keys()
            ->toArray();
    }

    public function getChannelSettings(): array
    {
        return Config::collection('notifications.channels')
            ->mapWithKeys(fn($config, $name) => [$name => $config['settings'] ?? []])
            ->toArray();
    }

    public function validateChannelConfigs(): array
    {
        $problems = [];

        Config::collection('notifications.channels')->each(function($config, $name) use (&$problems) {
            if (empty($config['driver'])) {
                $problems[] = "Канал '{$name}' не має драйвера";
            }
            if (empty($config['webhook_url']) && $config['driver'] === 'webhook') {
                $problems[] = "Канал '{$name}' потребує URL вебхука";
            }
        });

        return $problems;
    }
}

class CacheManager
{
    public function getRedisConnections(): array
    {
        return Config::collection('cache.stores')
            ->filter(fn($config) => $config['driver'] === 'redis')
            ->keys()
            ->toArray();
    }

    public function getStoresByType(): array
    {
        return Config::collection('cache.stores')
            ->groupBy('driver')
            ->map(fn($group) => $group->keys()->toArray())
            ->toArray();
    }
}

Цей метод добре працює, коли ваші конфігураційні файли містять масиви структурованих даних. Ось типовий конфігураційний файл, що виграє від використання методів колекцій:

return [
    'payment_providers' => [
        'stripe' => ['active' => true, 'test_mode' => false],
        'paypal' => ['active' => false, 'test_mode' => true],
        'square' => ['active' => true, 'test_mode' => true],
    ],
    'email_services' => [
        'ses' => ['active' => true, 'region' => 'us-east-1'],
        'mailgun' => ['active' => false, 'domain' => 'example.com'],
        'postmark' => ['active' => true, 'token' => 'abc123'],
    ],
];

class PaymentService
{
    public function getLiveProviders(): array
    {
        return Config::collection('services.payment_providers')
            ->filter(fn($config) => $config['active'] && !$config['test_mode'])
            ->keys()
            ->toArray();
    }

    public function countActiveProviders(): int
    {
        return Config::collection('services.payment_providers')
            ->filter(fn($config) => $config['active'])
            ->count();
    }
}

Ця зміна дозволяє уникнути необхідності пам'ятати про обгортання конфігураційних масивів у collect(). Це невелике, але важливе покращення, яке робить обробку конфігурацій більш зручною.

Популярні

Logomark Logotype

Оптимізація запитів до бази даних за допомогою скорочених методів Laravel

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

Logomark Logotype

Що нового в PHP 8.5

PHP 8.5 обіцяє безліч нових можливостей, таких як оператор Pipe, функції `array_first()` та `array_last()`, а також нове розширення URI. Чи готові ви дізнатися, як ці функції можуть спростити вашу розробку? Читайте далі, щоб дізнатися більше про ці захоплюючі нововведення

Logomark Logotype

Перетворення даних у типобезпечні DTO за допомогою пакету Data Model

Досліджуйте новий пакет Data Model для PHP, який спрощує процес гідратації об'єктів без зайвих складнощів! Дізнайтеся, як впровадження типобезпечних об'єктів може революціонізувати ваш підхід до розробки, читаючи нашу статтю