アレイ内の別のサービスにサービスを転送できません。
たとえば、これは私のもの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 をパラメーターとして渡すことができることはわかっていますが、コンテナーの挿入は避けたいと思います。