2017-09-06 2 views
1

小さなエラーですが、見つかりませんでした。 私はthe official docをフォローし、pre_serializeイベントでイベントリスナーを実装しようとしています。JMSシリアライザのイベントが機能していません

マイサービス宣言:

<service id="app.question_serializer_subscriber" class="AppBundle\Serializer\QuestionSerializerSubscriber"> 
    <tag name="jms_serializer.event_subscriber"/> 
</service> 

私の加入者:

<?php 

namespace AppBundle\Serializer; 

use JMS\Serializer\EventDispatcher\EventSubscriberInterface; 
use JMS\Serializer\EventDispatcher\ObjectEvent; 

class QuestionSerializerSubscriber implements EventSubscriberInterface 
{ 
    public static function getSubscribedEvents() 
    { 
     return array(
      array(
       'event' => 'serializer.pre_serialize', 
       'method' => 'onPreSerialize', 
      ) 
     ); 
    } 

    public function onPreSerialize(ObjectEvent $event) 
    { 
     die('in event'); 
    } 
} 

そして、私のコントローラ:

 $question = $repo->findLastVersionByQuestionId((int) $questionId); 
     $serializer = SerializerBuilder::create()->build(); 

     $context = new SerializationContext(); 
     return new JsonResponse(json_decode(
      $serializer->serialize(
       $question, 
       'json', 
       $context 
      ), 
      true 
     )); 

を、私は私のエンティティの質問はシリアル化されて表示された経路にアクセスしますが、 die('in event');はなぜ表示されませんか?ドキュメントに関する

public static function getSubscribedEvents() 
{ 
    return array(
     array(
      'event' => 'serializer.pre_serialize', 
      'class' => 'FQCN_class_name', 
      'method' => 'onPreSerialize', 
     ) 
    ); 
} 

もう一つの違いされています

多分それは私のオブジェクトはDoctrineのエンティティ(issue 666またはPR 677)であるという事実と関係を持っている例として、クラス属性を追加すること

答えて

1

このヘルプを願っています。問題は、これは動作しません

$serializer = SerializerBuilder::create()->build(); 

であるが、これはありません:

$serializer = $this->get('jms_serializer'); 
+0

素晴らしいです!あなたの答えを受け入れたものとしてマークして、ユーザーがより良いソリューションを見つけられるようにします – Matteo

0

てみてくださいクラスメソッドの引数には、ObjectEventの代わりにPreSerializeEventを使用する必要があります。

このように:

public function onPreSerialize(PreSerializeEvent $event) 
{ 
    // ... 
} 

あなたのサービスが正常にコンソールコマンドを使用して、一例としてコンテナからロードされて確認してください:

php app/console debug:container --tag=jms_serializer.event_subscriber

は、私は最終的に問題を見つける

+0

を私はすでに試した、と私はあまりにも「形式」=>「JSON」で試してみましたが、それは動作しません:( – iBadGamer

+0

'onPostSerialize'メソッドを使って試してみてください。 – Matteo

+0

私は4つのイベントを同じ関数(ダイを持つもの)にリンクしています。私のjsonはまだ表示されています – iBadGamer

関連する問題