Зарегистрируйте функции или строки в контейнере внедрения зависимостей Symfony - PullRequest
0 голосов
/ 17 октября 2018

Я хотел бы использовать контейнер 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 голосов
/ 17 октября 2018

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.

PS Я предположил, что Datatabase, что просто опечатка, и вы имели в виду Database

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...