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

  • David MeShow

    David MeShow

    10 EKİM 2006
  • LardTardProductions's channel

    LardTardProd

    10 NİSAN 2009
  • TechSmartt

    TechSmartt

    29 Aralık 2010