如何在Symfony事件侦听器上注入序列化程序作为参数

时间:2015-09-07 09:19:28

标签: symfony serialization

我的代码:

Services.yml

 acme_api.event.jwt_created_listener:
        class: Acme\DemoBundle\EventListener\JWTCreatedListener
        arguments: [ @doctrine.orm.entity_manager, @serializer ]
        tags:
            - { name: kernel.event_listener, event: lexik_jwt_authentication.on_jwt_created, method: onJWTCreated }  

的Acme \ DemoBundle \事件监听\ JWTCreatedListener

    namespace Acme\DemoBundle\EventListener;

    class JWTCreatedListener {
       public function __construct(\Doctrine\ORM\EntityManager $em, Symfony\Component\Serializer\

Serializer $serializer) {
        $this->em = $em;
        $this->serializer = $serializer;
    }


    public function onJWTCreated(\Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent $event) {

        $data = $event->getData();
        $songs = $this->em->getRepository('AcmeDemoBundle:Favsong')->findByUser($user);
        $data['songs'] = $this->serializer->serialize($songs, 'json');

        $event->setData($data);
    }
}

我只是尝试(没有成功)使用序列化编码器将教条对象编码为json。我觉得在宣布服务时我可能会错过一些观点。另外我想知道在参数yml部分使用的可用选项的记录位置,因为我总是从示例中复制,并尝试使用@serializer进行猜测。我想我错过了一些官方的SF2文件。

1 个答案:

答案 0 :(得分:1)

你很可能在参数类型提示前面缺少前导反斜杠(\)。所以而不是:

Symfony\Component\Serializer\Serializer $serializer

做的:

\Symfony\Component\Serializer\Serializer $serializer

这是否解决了这个问题?