これまで、バージョン管理されていないファイルのコンテナー パラメーターを使用して、parameters.yml
いくつかのバンドルを構成してきました。サービス定義に挿入する必要があるサービスを決定するためにコンテナーのコンパイル中に読み取られるパラメーター。
今日、構成を環境変数に置き換えたいと思いparameters.yml
ますが、それらは実行時に解決されるため、コンテナーの構築時にその値を使用できず、サービスは後で公開する必要があります。
ここで何か不足していますか?そのようにサービスを構成するクリーンな方法はありますか?
[編集]
機能が有効になっているかどうかに応じてユーザー プロバイダーサービスを挿入し、ユーザー名を提供したいと考えています。MyService
mock
# bundle configuration
my_extension:
mock:
enabled: '%env(MOCK_ENABLED)%'
provider: '%env(MOCK_PROVIDER)%'
username: '%env(MOCK_USERNAME)%'
<?php
class MyExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
// here, mock_enabled is an env var placeholder, not a boolean value
// the condition will thus always resolve to true.
if ($config['mock_enabled']) {
// The other two env vars will be evaluated at runtime
// and I'm ok with that
$username = $config['mock_username'];
$provider = new Definition(
$config['mock_provider'],
[$config['mock_username']]
);
} else {
$provider = new Reference(InMemoryUserProvider::class, [[]];
}
$definition = new Definition(MyService::class);
$definition->addMethodCall('setProvider', new Reference($provider));
}
}