0

アレイ内の別のサービスにサービスを転送できません。

たとえば、これは私のもの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 をパラメーターとして渡すことができることはわかっていますが、コンテナーの挿入は避けたいと思います。

4

0 に答える 0