Спрощення масивів конфігурації в 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

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

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

Logomark Logotype

Що нового в PHP 8.5

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