2014-12-15 26 views
6

ben JMS Serializer Paketi Bu hiçbir şey yapmazÖzel Handler

class CustomHandler implements SubscribingHandlerInterface 
{ 
    public static function getSubscribingMethods() 
    { 
     return array(
      array(
       'direction' => GraphNavigator::DIRECTION_SERIALIZATION, 
       'format' => 'json', 
       'type' => 'integer', 
       'method' => 'serializeIntToJson', 
      ), 
     ); 
    } 

    public function serializeIntToJson(JsonSerializationVisitor $visitor, $int, array $type, Context $context) 
    { 
     die("GIVE ME SOMETHING"); 
    } 
} 

için özel bir işleyici kullanmak çalışılıyor göz ardı edilir ve ölmez. Bu benim

$serializer = SerializerBuilder::create() 
    ->configureHandlers(function(HandlerRegistry $registry) { 
     $registry->registerSubscribingHandler(new MyHandler()); 
    }) 
    ->addDefaultHandlers() 
    ->build(); 

$json = $serializer->serialize($obj, 'json'); 

Benim işleyicisi asla denir işleyicisi kayıt ediyorum ve serileştirme verileri manipüle edemez nasıl.

+2

Bunu hiç anladın mı? Aynı problemi yaşıyorum. 'getSubscribingMethods()' denir ama 'serializeIntToJson' – Chris

+1

@Chris çıkışım yeni yanıtım - farklı bir soruya cevap vermiş olmamıza rağmen görünüyor! Ayı benimle .... –

+1

@Chris, OK Şimdi başka bir cevap gönderdim. Umarım bu yardımcı olur. –

cevap

2

Ben

$serializer = SerializerBuilder::create() 
     ->configureListeners(function(EventDispatcher $dispatcher) { 
      $dispatcher->addSubscriber(new ProjectSubscriber($this->container)); 
      $dispatcher->addSubscriber(new UserSubscriber($this->container)); 
     }) 
     ->addDefaultListeners() 
     ->addMetadataDir(realpath($this->get('kernel')->getRootDir()."/../") . '/src/Jake/NameOfBundle/Resources/config/serializer') 
     ->build(); 

    return $serializer->serialize($project, 'json'); 

çalıştığı bu var $project benim varlığım. Benim asıl sorun bu ->addDefaultListeners() olduğunu düşünüyorum Eğer seri hale yapılandırmaları

->addMetadataDir(realpath($this->get('kernel')->getRootDir()."/../") . '/src/Jake/NameOfBundle/Resources/config/serializer') 

yoksa

Bu çizgiyi atlayabilirsiniz. config.yml yılında

Ben

jms_serializer: 
    metadata: 
     auto_detection: true 
     directories: 
      NameOfBundle: 
       namespace_prefix: "" 
       path: "@JakeNameOfBundle/Resources/config/serializer" 

Ben JMS bir hizmet yapmak için kurulmuş anthing yok yok.

4

Bu işleyicisi için bir hizmet oluşturmak gerekir:

Sonra
custom_jms_handler: 
    class: MyBundle\Serializer\CustomHandler 
    tags: 
     - { name: jms_serializer.subscribing_handler } 

kayıtlı JMS serileştirici servisini kullanmak emin olun

$json = $this->get('jms_serializer')->serialize($obj, 'json'); 
+0

jms_serializer dosyasını custom_jms_handler dosyasına önek eklerken service.yml hizmetini oluşturmak. Bunun gibi: 'jms_serializer.custom_jms_handler' – franbenz