我是 Slim 框架 (PHP) 的新手。我正在阅读教程并测试一些代码并尝试了以下操作:
$app=new App([
'mode'=>file_get_contents(INC_ROOT . '/mode.php')
]);
echo $app->config('mode');
输出为空白。
似乎该功能config()
适用于 V2,但我使用的是 V3。我究竟做错了什么?
我是 Slim 框架 (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' => 'alex@cleansthetoilet.com'
]
]
];
/path/to/config/production.php
return [
'contacts' => [
'housekeeper' => [
'email' => 'alex@istheboss.com'
]
],
'database' => [
'password' => 'sup3rC-cr3t'
]
];
索引.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' => 'alex@istheboss.com'
]
],
'database' => [
'password' => 'sup3rC-cr3t'
]
]
请注意, 的值contacts.housekeeper.email
已更新为'alex@istheboss.com'
,并且database
配置信息已被合并。顺便提一下,您还可以使用更方便的“点语法”访问配置设置:
$config = $container->get('config');
echo $config['contacts.housekeeper.email'];
// Easier to type instead of $config['contacts']['housekeeper']['email'];
我们建议在 Slim 中将其作为单独的config
服务注入,而不是使用它们的settings
数组。
您可以将其与phpdotenv结合以从系统环境或.env
您创建的任何文件中加载设置:
/path/to/config/production.php
return [
'database' => [
'password' => getenv('DB_PASSWORD')
]
];