Настройка / получение режима в Slim Framework V3

Я новичок в Slim Framework (PHP). Я просматривал учебники и тестировал некоторый код и попробовал следующее:

$app=new App([
'mode'=>file_get_contents(INC_ROOT . '/mode.php')
]);
echo $app->config('mode');

Вывод был пустым.

Похоже функция config() работает с V2, однако я использую V3. Что я делаю неправильно?

1

Решение

Slim 3 больше не имеет config метод. Вместо этого вы должны добавить параметры конфигурации через контейнер внедрения зависимостей:

$app = new \Slim\App([
'settings' => [
'mode' => true
]
]);

$container = $app->getContainer();
echo $container->get('settings')['mode'];

Несколько вещей, на которые стоит обратить внимание:

Slim 3 больше не справляется с управлением различными версиями параметров конфигурации через mode установка. Таким образом, вы можете установить значение для переменной настройки под названием mode как я продемонстрировал здесь, но на самом деле он ничего не будет делать (то есть Slim не будет использовать его для определения вашей среды).

В качестве альтернативы вы можете проверить userfrosting / Config, библиотека, над которой мы работаем, которая может выполнять поиск по нескольким каталогам и различным файлам конфигурации среды, объединяя их содержимое:

/path/to/config/default.php

return [
'contacts' => [
'housekeeper' => [
'name' => 'Alex',
'email' => '[email protected]'
]
]
];

/path/to/config/production.php

return [
'contacts' => [
'housekeeper' => [
'email' => '[email protected]'
]
],
'database' => [
'password' => 'sup3rC-cr3t'
]
];

index.php

$app = new \Slim\App();

$container = $app->getContainer();

// Site config object (separate from Slim settings)
$container['config'] = function ($c) {
// Create and inject new config item
$config = new \UserFrosting\Config\Config();

$config->setPaths([
'/path/to/config'
]);

$config->loadConfigurationFiles('production');

return $config;
};

Это будет рекурсивно сливаться в настройках из development.php с теми, кто в default.php, обновляя настройки с тем же именем и областью, как необходимо:

Бег print_r($container['config']); возвращает:

[
'contacts' => [
'housekeeper' => [
'name' => 'Alex',
'email' => '[email protected]'
]
],
'database' => [
'password' => 'sup3rC-cr3t'
]
]

Обратите внимание, что значение contacts.housekeeper.email был обновлен до '[email protected]'и что database Информация о конфигурации была объединена. Кстати, вы также можете получить доступ к настройкам конфигурации, используя более удобный «точечный синтаксис»:

$config = $container->get('config');
echo $config['contacts.housekeeper.email'];
// Easier to type instead of $config['contacts']['housekeeper']['email'];

Мы рекомендуем вводить это как отдельный config сервис в Слиме, а не используя их settings массив.

Вы можете объединить это с phpdotenv загрузить настройки из вашей системной среды или любого .env файлы, которые вы создаете:

/path/to/config/production.php

return [
'database' => [
'password' => getenv('DB_PASSWORD')
]
];
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]