2012-04-11 26 views
5

Bazı verileri bir API aracılığıyla xml biçiminde toplar ve bunları bir nesne listesinde silmeyi isterim. Symfony2 kullanıyorum ve JMSSerializerBundle'ı öğreniyorum ama nasıl kullanacağımı gerçekten bilmiyorum.Symfony2 ile nesnelere xml dönüştürün Desentize edin

Sf2'nin nesneden diziye/seriye serileştirilmesine/serileştirilmesine izin verdiğini biliyorum, ancak daha spesifik bir şey arıyorum. Örneğin , bu sınıf için:

<?xml version="1.0" encoding="UTF-8" ?> 
<screenshots> 
    <screenshot> 
     <id>1</id> 
     <url_screenshot>screenshot_url1</url_screenshot> 
    </screenshot> 
    <screenshot> 
     <id>2</id> 
     <url_screenshot>screenshot_url2</url_screenshot> 
    </screenshot> 
    <screenshot> 
     <id>3</id> 
     <url_screenshot>screenshot_url3</url_screenshot> 
    </screenshot> 
</screenshots> 
Gerçekten SF2 entegre etmek entegre bir şeyler/kullanmak isteyen

(şey:

class Screenshot 
{ 
    /** 
    * @var integer $id 
    */ 
    private $id; 

    /** 
    * @var string $url_screenshot 
    */ 
    private $url_screenshot; 


    public function __construct($id, $url_screenshot) { 
     $this->id = $id; 
     $this->url_screenshot = $url_screenshot; 
    } 


    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set url_screenshot 
    * 
    * @param string $urlScreenshot 
    */ 
    public function setUrlScreenshot($urlScreenshot) 
    { 
     $this->url_screenshot = $urlScreenshot; 
    } 

    /** 
    * Get url_screenshot 
    * 
    * @return string 
    */ 
    public function getUrlScreenshot() 
    { 
     return $this->url_screenshot; 
    } 

    /** 
    * Serializes the Screenshot object. 
    * 
    * @return string 
    */ 
    public function serialize() 
    { 
     return serialize(array(
      $this->id, 
      $this->url_screenshot 
     )); 
    } 

    /** 
    * Unserializes the Screenshot object. 
    * 
    * @param string $serialized 
    */ 
    public function unserialize($serialized) 
    { 
     list(
      $this->id, 
      $this->url_screenshot 
     ) = unserialize($serialized); 
    } 

    public function __toString() { 
     return "id: ".$this->id 
       ."screenshot: ".$this->url_screenshot; 
    } 
} 

ben xml bu tür için// deserializing seri hale istiyorum "pürüzsüz") ve herhangi bir ev yapımı xml ayrıştırıcılardan kaçınmayı tercih edin.

cevap

4

XML'in doğası gereği, tam istediğiniz şey mümkün değildir. Nesneyi -> xml ve xml -> nesnesini çevirmek için her zaman bir şeye ihtiyaç duyarsınız.

Size önerim, koleksiyon olarak çalışan ve sizin için ilgilenen, xml girişinden oluşturulabilecek nesnelerin listesini bulunduran ve varolan nesnelerden xml çıktı oluşturabilen bir sınıf olacaktır.

Bir alternativ (gerçekten xml olarak buna sahip olmanıza gerek yok), sadece nesneleri serileştirmek ve bu şekilde depolamak ya da bir diziyi (veya toplama nesnesini) hepsini bir seferde yeniden düzenlemekse . PHP'nin düz serialize() ve unserialize() işlevleri oradaki numarayı yapacak. Yalnızca veri olduğu için, sınıfınızda serileştirme ve sınıflandırmayı kaldırma yöntemlerine bile ihtiyacınız yoktur.

Güncelleme: sadece bir nesnenin içine XML alacak olursa sonra zaten size kapalı sahiptir SimpleXML: http://www.php.net/manual/en/function.simplexml-load-string.php

İkinci parametre sınıf adıdır.

Quote: Bu isteğe bağlı parametreyi, simplexml_load_string() öğesinin belirtilen sınıfın bir nesnesini döndürmesi için kullanabilirsiniz. Bu sınıf SimpleXMLElement sınıfını genişletmelidir.

Yalnızca bu sizin hedefinizse, simplexml zaten yapar.

Güncelleştirme 2: Paketin içine biraz daha okudum. İstediğinizi yapmaz. Bir nesneyi alır ve onu XML/YAML'ye serileştirir ve daha sonra elbette bu serileştirilmiş durumlardan bu süreci tersine çevirir. Bazı rastgele XML dosyalarını alıp sizin için mükemmel bir nesneye dönüştüremez.

+0

Cevabınız için teşekkür ederiz. – Mikolaj

+0

Bir şey değil. Onu alıp kabul ederek bana teşekkür edebilirsin :) –

+0

Aslında, atışımı özlüyorum :) İşte benim yorumum: Cevabınız için teşekkürler. Aslında, görüntülenen sınıf sadece bir örnektir ve 2 fonksiyon basit denemelerdir. Ev yapımı işlevlerle xml/serileştirmek/serileştirmek istemiyorum. JMSSerializerBundle'nin istediğimi sağlayabildiğini biliyorum ama düzgün bir şekilde kullanmayı başaramadım ... Özellikle JMSSB kullanımı için bir örnek arıyorum ya da Symfony2 ile// ile ölçeklenebilir bir şey olan "otomatik" bir başka yöntem arıyorum. – Mikolaj