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



我想使用Symfony di container来注册匿名函数或字符串。理想情况下使用 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(...);

可能吗?如何?

databasehost

是一个参数,而您正在尝试将其注册为服务。 相反,您应该通过setParameter方法设置它,使其成为一个参数。

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

DIC组件文档中有一个非常相似的例子:

$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方法。

附言我以为Datatabase只是一个错字,你的意思是Database