我想使用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(...);
有可能吗?怎么样?
答案 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并没有说要建造硬币容器,而只是说要从中获取服务。它仅定义get
和has
方法。
P.S。我认为Datatabase
只是错字,而您的意思是Database