SORU
15 Temmuz 2011, Cuma


Nasıl Doktrini varlıklar Symfony 2.0 AJAX uygulamasında JSON kodlamak için?

Oyun Uygulama Geliştirme ve Symfony 2.0 kullanıyorum. Arka uç için bir çok AJAX istekleri var. Ve daha fazla tepkiler varlık JSON dönüştürme. Örneğin:

class DefaultController extends Controller
{           
    public function launchAction()
    {   
        $user = $this->getDoctrine()
                     ->getRepository('UserBundle:User')                
                     ->find($id);

        // encode user to json format
        $userDataAsJson = $this->encodeUserDataToJson($user);
        return array(
            'userDataAsJson' => $userDataAsJson
        );            
    }

    private function encodeUserDataToJson(User $user)
    {
        $userData = array(
            'id' => $user->getId(),
            'profile' => array(
                'nickname' => $user->getProfile()->getNickname()
            )
        );

        $jsonEncoder = new JsonEncoder();        
        return $jsonEncoder->encode($userData, $format = 'json');
    }
}

Ve benim denetleyicileri aynı şeyi yaparlar: bir varlık almak ve bazı alanları JSON kodlamak. Normalizers kullanın ve tüm entitities kodlama biliyorum. Ama eğer bir varlık başka bir varlığa sağlanıncaya bağlantıları varsa? Varlıkları ya da grafik çok büyük? Herhangi bir öneriniz var mı?

Varlıklar için bazı kodlama şeması düşünüyorum... veya NormalizableInterface bisiklet.., . önlemek için kullanma

CEVAP
13 Aralık 2011, Salı


Başka bir seçenek JMSSerializerBundle kullanmaktır. Kumandanız sen yap o zaman

$serializer = $this->container->get('serializer');
$reports = $serializer->serialize($doctrineobject, 'json');
return new Response($reports); // should be $reports as $doctrineobject is not serialized

Seri hale getirme nasıl yapılır varlık sınıf ek açıklamaları kullanarak yapılandırabilirsiniz. Yukarıdaki bağlantı ile ilgili belgelere bakın. Örneğin, burada bağlı kuruluşlar hariç ki:

 /**
* Iddp\RorBundle\Entity\Report
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="Iddp\RorBundle\Entity\ReportRepository")
* @ExclusionPolicy("None")
*/
....
/**
* @ORM\ManyToOne(targetEntity="Client", inversedBy="reports")
* @ORM\JoinColumn(name="client_id", referencedColumnName="id")
* @Exclude
*/
protected $client;

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • calicoJake

    calicoJake

    29 EKİM 2007
  • KliptOut KwazeeKilla

    KliptOut Kwa

    24 ŞUBAT 2010
  • Shaollin Animes

    Shaollin Ani

    19 HAZİRAN 2013