Я новичок в Slim Framework (PHP). Я просматривал учебники и тестировал некоторый код и попробовал следующее:
$app=new App([
'mode'=>file_get_contents(INC_ROOT . '/mode.php')
]);
echo $app->config('mode');
Вывод был пустым.
Похоже функция config()
работает с V2, однако я использую V3. Что я делаю неправильно?
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')
]
];
Других решений пока нет …