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

Популярні

Інше, що варто прочитати

18 Оновлено 01 червня, 2026

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

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

11 Оновлено 01 червня, 2026

Локальні моделі та їх скоупи в Laravel за допомогою атрибута Scope

В Laravel 12 ми отримали можливість використовувати новий підхід для визначення локальних скоупів у моделях Eloquent. Дізнайтеся, як новий атрибут #[Scope] спрощує цей процес і зберігає ваші назви методів незмінними

17 Оновлено 01 червня, 2026

Налаштування Xdebug з Docker та PHP 8.4 всього за одну хвилину

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