2

ドキュメントによると:

コンテナーは、get() ショートカット メソッドを介してコンテナーのサービスにアクセスできる従来の Symfony2 コントローラーで利用できます。

したがって、次のように呼び出して、コントローラー内で JMSSerializer を呼び出して使用することができました。

$serializer = $this->get('serializer');

ただし、カスタム クラスでコンテナーを呼び出すにはどうすればよいでしょうか。同じコマンドが失敗し、未定義のメソッド get() を呼び出すための致命的なエラーが示されます。

4

1 に答える 1

6

これはまさに依存性注入の目的です。「カスタム クラス」は「シリアライザー」サービスに依存しています。そのため、クラスをサービス コンテナー内のサービスとして定義する必要があります。

アプリ/設定/config.yml

services:
    my_custom_class:
        class:        My\RandomBundle\CustomClass
        arguments:    [serializer]

My\RandomBundle\CustomClass

use JMS\SerializerBundle\Serializer\Serializer;

class CustomClass
{
    private serializer;

    public function __construct(Serializer $serializer)
    {
        $this->serializer = $serializer;
    }
}

これで、コンテナーが使用されている場所ならどこでもカスタム クラスを取得でき、自動的にシリアライザーが使用できるようになります。

$myServiceWithASerializer = $this->container->get('my_custom_class');

ドキュメントでもこれについて説明しています:
http://symfony.com/doc/current/book/service_container.html#creating-configuring-services-in-the-container

于 2012-11-09T16:55:01.213 に答える