如何访问服务容器以使用JMSSerializer?

DVC*_*DVC 2 symfony jmsserializerbundle

根据文件:

该容器可用于任何传统的Symfony2控制器,您可以通过get()快捷方法访问容器的服务

所以,我设法通过调用以下方法在Controller中调用和使用JMSSerializer:

$serializer = $this->get('serializer');
Run Code Online (Sandbox Code Playgroud)

但是,如何在自定义类中调用容器?相同的命令失败,表示调用未定义方法get()的致命错误.

MDr*_*tte 6

这正是依赖注入的目的.您的"自定义类"依赖于"序列化程序"服务.因此,您应该将您的类定义为服务容器中的服务

应用程序/配置/ config.yml

services:
    my_custom_class:
        class:        My\RandomBundle\CustomClass
        arguments:    [serializer]
Run Code Online (Sandbox Code Playgroud)

我\ RandomBundle\CustomClass

use JMS\SerializerBundle\Serializer\Serializer;

class CustomClass
{
    private serializer;

    public function __construct(Serializer $serializer)
    {
        $this->serializer = $serializer;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以从容器中获取自定义类,无论它在何处使用,它都会自动使用序列化程序.

$myServiceWithASerializer = $this->container->get('my_custom_class');
Run Code Online (Sandbox Code Playgroud)

文档也描述了这一点:http:
//symfony.com/doc/current/book/service_container.html#creating-configuring-services-in-the-container