根据文档:
该容器在任何传统的 Symfony2 控制器中都可用,您可以通过 get() 快捷方法访问容器的服务
因此,我设法通过调用以下方法在 Controller 中调用和使用 JMSSerializer:
$serializer = $this->get('serializer');
但是,如何在自定义类中调用容器?相同的命令失败,表明调用未定义的方法 get() 时出现致命错误。
根据文档:
该容器在任何传统的 Symfony2 控制器中都可用,您可以通过 get() 快捷方法访问容器的服务
因此,我设法通过调用以下方法在 Controller 中调用和使用 JMSSerializer:
$serializer = $this->get('serializer');
但是,如何在自定义类中调用容器?相同的命令失败,表明调用未定义的方法 get() 时出现致命错误。
这正是依赖注入的用途。您的“自定义类”依赖于“序列化程序”服务。因此,您应该将您的类定义为服务容器中的服务
应用程序/配置/config.yml
services:
my_custom_class:
class: My\RandomBundle\CustomClass
arguments: [serializer]
我的\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