0

我在 Symfony2 中有一个需要ProductManager服务的命令。

我向该服务传递了两个参数:Doctrine 的实体管理器和来自的配置数组app/config/config.yml

这是我services.xml的捆绑包:

<service id="acme.product_manager" class="Acme\ApiBundle\ProductManager" public="true">
    <argument>'@doctrine.orm.entity_manager'</argument>
    <argument>"keys"</argument>
</service>

这是命令中的代码:

protected function execute(InputInterface $input, OutputInterface $output)
{
    $productManager = $this->getProductManager();
}

public function getProductManager()
{
    $em = $this->getContainer()->get('doctrine')->getManager();
    $config = $this->getContainer()->getParameter('acme_api.config');
    $keys = $config['keys']['beta_keys'];

    $productManager = new ProductManager($em, $keys);

    return $productManager;
}

中的配置app/config/config.yml

acme_api:
    keys:
        beta_keys:
            app_key:  "XXXXXX"
            rest_api_key: "YYYYYY"

最后是服务构造函数:

public function __construct(EntityManager $em, $keys)
{
}

我认为实体管理器已正确注入服务,但是我对这个keys论点有疑问。

是否也应该注入它(就像我现在正在做的那样),或者最好以某种方式从服务内部检索配置以避免每次实例化时将其作为参数传递?

4

1 回答 1

2

首先,“钥匙”不起作用。

一个好的配置是:

<service id="acme.product_manager" class="Acme\ApiBundle\ProductManager" public="true">
    <argument type="service" id="doctrine.orm.entity_manager" />
    <argument>%acme_api.keys%</argument>
</service>

此外,当您使用 DIC 在 xml/yml 中定义服务时,应避免在您的函数 getProductManager 中自己执行此操作。

你的 getProductionManager 应该是这样的:

private function getProductManager()
{
    //as defined in you services.xml
    return $this->getContainer()->get('acme.product_manager');
}
于 2015-02-16T13:05:22.290 回答