我无法将服务转移到数组中的其他服务。
例如,这是我的config.yml
:
services:
car.price.calculator:
class: My\SuperBundle\CarCalculator
arguments: "something"
product_viewer:
car:
rest_client: "@car.price.calculator" # <- this is the service I cannot transfer
rest_url: http://example.com
和service.xml
:
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="product.browser" class="Mrok\ShopBundle\Price\Calculator">
<argument key="car" type="collection">
<argument key="rest_client">%product.browser.rest_client%</argument>
<argument key="rest_url">%product.browser.rest_url%</argument>
</argument>
</service>
</services>
</container>
我的MrokShopExtension将数据从配置重写为容器参数,例如
$container->setParameter('product.browser.rest_client', $config[0]['car']['rest_client']);
Calculator
上课:
class Calculator {
private $set;
public function __contruct(array $set) {
$this->set = $set;
var_dump($set);
}
因此我得到了代码中的var_dump
:
array (size=2)
'rest_client' => string '@car.price.calculator' <- and here is a problem, it is a string, should be object
如何获取字符串rest_client
而不是获取类实例(服务)。
我无法将论据改为:
<argument type="service" id="car.price.calculator" />
因为我不知道最终用户会注入什么样的服务。
我知道我可以将整个容器和服务id作为参数传递 - 但我想避免注入容器。