Внедрение параметров других сервисов в мой сервис - PullRequest
3 голосов
/ 02 сентября 2011

Я хотел бы знать, возможно ли внедрить параметры службы в мою собственную службу, и если да, то как?

Позвольте мне представить вас в контексте.Я использую FOSFacebookBundle, который загружает некоторую конфигурацию из файла config.yml.Эти параметры конфигурации (например, мой Facebook app_id, secret, cookie и т. Д.) Сохраняются с параметрами FOSFacebookBundle с этим кодом:

// FOS\FacebookBundle\DependencyInjection\FOSFacebookExtension.php
foreach (array('file', 'app_id', 'secret', 'cookie', 'domain', 'logging', 'culture', 'permissions') as $attribute) {
    $containerBuilder->setParameter('fos_facebook.'.$attribute, $config[$attribute]);
}

Я знаю, что возможнополучить эти параметры через $container, выполнив:

$container->getParameter('fos_facebook.app_id');

Но я хотел бы знать, возможно ли внедрить эти параметры непосредственно в одно из моих определений сервиса.У меня есть одна служба под названием FacebookHelper, которая нуждается в этой информации.Поэтому я хотел бы сделать что-то вроде:

acme.helper.facebook:
  class: Application\AcmeBundle\Helper\FacebookHelper
  arguments:
    entityManager: "@doctrine.orm.entity_manager"
    facebook: "@fos_facebook.api"
    facebookAttributes:
      - "@fos_facebook.app_id"
      - "@fos_facebook.secret"
      - "@fos_facebook.cookie"

Конечно, этот синтаксис не работает, потому что Symfony ищет сервис с именем fos_facebook.app_id, который не существует.

Я ищу решение, которое бы позволило не вводить контейнер непосредственно в мой сервис.Либо с помощью прямого определения в моем файле services.yml, либо с помощью расширения DI моего пакета, которое должно было бы выполнить определенную работу по определению моей пользовательской службы, извлечь параметры из FOSFacebookBundle и вставить их в него.

С уважением,
Мэтт

1 Ответ

10 голосов
/ 02 сентября 2011

На самом деле, это действительно легко, и мне стыдно, что я не подумал об этом, прежде чем опубликовать свой вопрос.Я знал о том, как использовать параметры в файле config.yml (например, с помощью% locale%, например), но я не думал об использовании этого синтаксиса для ввода параметров в моем определении сервиса.

Вот какЯ ввел FOSFacebookBundle параметры в моем сервисе:

acme.helper.facebook:
  class: Application\AcmeBundle\Helper\FacebookHelper
  arguments:
    entityManager: "@doctrine.orm.entity_manager"
    facebook: "@fos_facebook.api"
    facebookAttributes:
      appId: "%fos_facebook.app_id%"
      secret: "%fos_facebook.secret%"
      permissions: "%fos_facebook.permissions%"

Так просто :) Надеюсь, это поможет кому-то еще.

С уважением,
Мэтт

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