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

  • Menglong Tav

    Menglong Tav

    18 Temmuz 2010
  • Xcode programming tutorials

    Xcode progra

    17 EYLÜL 2006
  • xSammyJoe1

    xSammyJoe1

    19 Temmuz 2011