将函数或字符串注册到Symfony依赖项注入容器中

时间:2018-10-17 10:19:16

标签: php symfony dependency-injection

我想使用Symfony di容器注册匿名函数或字符串。理想情况下,使用PSR11 API,如下所示:

$containerBuilder = new ContainerBuilder();
$containerBuilder->register('databasehost', '127.0.0.1');
$containerBuilder->register('Database', function($c) {
   return new Database($c->get('databasehost'));
};
$containerBuilder->get('Database')->insertInto(...);

有可能吗?怎么样?

1 个答案:

答案 0 :(得分:0)

databasehost是一个参数,当您尝试将其注册为服务时。 相反,您应该通过setParameter方法将其设置为确实是一个参数。

然后,您可以使用它通过addArgument方法将其注入服务。

DIC Component docs中有一个非常相似的示例:

$containerBuilder = new ContainerBuilder();
$containerBuilder->setParameter('mailer.transport', 'sendmail');
$containerBuilder
    ->register('mailer', 'Mailer')
    ->addArgument('%mailer.transport%');

所以您的代码应类似于:

$containerBuilder = new ContainerBuilder();
$containerBuilder->setParameter('databasehost', '127.0.0.1');
$containerBuilder
    ->register('Database', 'Database')
    ->addArgument('%databasehost%');

顺便说一句,PSR-11并没有说要建造硬币容器,而只是说要从中获取服务。它仅定义gethas方法。

P.S。我认为Datatabase只是错字,而您的意思是Database