symfony - 在我自己的服务中注入(inject)其他服务的参数

标签 symfony

我想知道是否可以在我自己的服务中注入(inject)服务的参数,如果可以,如何注入(inject)?

让我给你介绍一下背景。我正在使用 FOSFacebookBundle,它从 config.yml 文件加载一些配置。这些配置设置(例如我的 facebook app_idsecretcookie 等)由 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');

但我想知道是否可以将这些参数直接注入(inject)我的服务定义之一。我有一项名为 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 的服务,但该服务不存在。

我正在寻找一种解决方案,以避免将容器直接注入(inject)我的服务中。通过在我的 services.yml 文件中进行直接定义,或者通过我的包的 DI 扩展(这将做一些工作来定义我的自定义服务),从 FOSFacebookBundle 检索参数> 并将它们注入(inject)其中。

问候,
马特

最佳答案

事实上,这真的很简单,我为自己在发布问题之前没有考虑到这一点感到羞愧。我知道如何使用 config.yml 文件中的参数(例如,通过使用 %locale%),但我没有考虑使用此语法在我的服务定义中注入(inject)参数。

以下是我在服务中注入(inject) 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%"

就这么简单:) 希望这对其他人有帮助。

问候,
马特

关于symfony - 在我自己的服务中注入(inject)其他服务的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7285096/

相关文章:

Symfony2 和 phpunit : enable method override

php - 用于奏鸣曲管理编辑表单的 ValueObject 而不是实体

symfony - 如何强制 symfony 的 phpunit 桥使用 phpunit 6.5 而不是 5.7?

symfony - 在为现有数据库创建实体和存储库后生成初始迁移

php - Symfony 4 不 Autowiring 动态路由 Controller

php - Symfony 3、Php 和 Ubuntu 16 无法上传大文件

symfony - 如何配置 OneupUploaderBundle?

forms - Symfony2:如何将自定义错误消息转换为表单类型?

php - Doctrine2 一对多/多对一关系给出重复记录

symfony - 如何在 Swagger (OpenApi) 中添加 JSON 请求和响应示例?