【问题标题】:Setting/retrieving mode in Slim Framework V3Slim Framework V3 中的设置/检索模式
【发布时间】:2016-04-08 08:08:37
【问题描述】:

我是 Slim 框架 (PHP) 的新手。我正在阅读教程并测试一些代码并尝试了以下方法:

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

输出为空白。

似乎函数config() 可以与V2 一起使用,但我使用的是V3。我做错了什么?

【问题讨论】:

标签: php configuration slim slim-3


【解决方案1】:

Slim 3 不再有 config 方法。相反,你必须add configuration settings through the dependency injection container:

$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'
    ]
];

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' => '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')
    ]
];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    • 2018-09-27
    • 2018-05-12
    • 2016-11-20
    • 1970-01-01
    相关资源
    最近更新 更多