1

Slim Framework (PHP) は初めてです。私はチュートリアルを進め、いくつかのコードをテストしていましたが、次のことを試しました。

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

出力は空白でした。

機能config()はV2で動くようですが、私はV3を使用しています。私は何を間違っていますか?

4

1 に答える 1

3

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

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

配列configを使用するのではなく、これを別のサービスとして Slim に挿入することをお勧めします。settings

これをphpdotenvと組み合わせて、システム環境または.env作成したファイルから設定をロードできます。

/path/to/config/production.php

return [
    'database' => [
        'password' => getenv('DB_PASSWORD')
    ]
];
于 2016-04-07T23:07:36.570 に答える