2

ある登録済みコンテナー定義から別のコンテナー定義に動的依存関係を渡すにはどうすればよいですか? この場合、汎用の Database オブジェクトは、汎用の Config オブジェクトから継承する必要があります。ツイストは構成が静的ではなく、特定の環境変数に応じてロードされることです。

関連するメソッドを構成する

    public function __construct()
    {
        $configFile = 'example.config.yml';
        $yamlParser = new Parser();
        $reader = new Config\Reader($yamlParser);
        $configYaml = $reader->parse(file_get_contents($configFile));
        $config = new Config\Environment(getenv('SITE'), $configYaml);

        $this->config = $config;
    }

    public function getEnvironmentConfig()
    {
        return $this->config;
    }

設定の登録は次のように簡単です

$container->register('config', 'Config');

データベースは現在、次のようにコンテナーに追加されています。

$container
    ->register('database', 'Database')
    ->addArgument($config->getEnvironmentConfig('Database', 'db.username'))
    ->addArgument($config->getEnvironmentConfig('Database', 'db.password'))
;

しかし、私は次のようなことをしたい

$container
        ->register('database', 'Database')
        ->addArgument(new Reference('config')->getEnvironmentConfig('Database', 'db.username'))
        ->addArgument(new Reference('config')->getEnvironmentConfig('Database', 'db.password'))
    ;

$config in-PHP 変数により、PHP で構築された構成からの移行が不可能になります。yaml でサービスを定義して、コンテナに次のことを強制したい:

  1. 構成のインスタンス化
  2. 構成 yaml ファイルを解析し、環境固有のバージョンを作成する
  3. getEnvironmentConfig への呼び出しでこれを返します

これは可能ですか?

4

1 に答える 1

0

これは、式言語コンポーネントを使用することで解決されました

したがって、メソッド呼び出しを簡単にチェーンできます。たとえば、次のようになります。

use Symfony\Component\ExpressionLanguage\Expression;
$container->register('database', 'Database')
          ->addArgument(new Expression('service("config").getEnvironmentConfig("Database", "db.username")'));
于 2015-02-12T14:56:26.450 に答える