如何从其他容器项访问动态引用?
How to access dynamic references from other container items?
如何将动态依赖项从一个已注册的容器定义传递到另一个容器定义?在这种情况下,通用数据库对象希望从通用配置对象继承。扭曲的是配置不是静态的,而是根据给定的环境变量加载的。
配置相关方法
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 中定义服务强制容器:
- 实例化配置
- 解析配置 yaml 文件并创建特定于环境的版本
- Return 调用 getEnvironmentConfig
这可能吗?
这已通过使用 Expression Language Component
解决
因此您可以轻松地链接方法调用,例如:
use Symfony\Component\ExpressionLanguage\Expression;
$container->register('database', 'Database')
->addArgument(new Expression('service("config").getEnvironmentConfig("Database", "db.username")'));
如何将动态依赖项从一个已注册的容器定义传递到另一个容器定义?在这种情况下,通用数据库对象希望从通用配置对象继承。扭曲的是配置不是静态的,而是根据给定的环境变量加载的。
配置相关方法
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 中定义服务强制容器:
- 实例化配置
- 解析配置 yaml 文件并创建特定于环境的版本
- Return 调用 getEnvironmentConfig
这可能吗?
这已通过使用 Expression Language Component
解决因此您可以轻松地链接方法调用,例如:
use Symfony\Component\ExpressionLanguage\Expression;
$container->register('database', 'Database')
->addArgument(new Expression('service("config").getEnvironmentConfig("Database", "db.username")'));