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