0
我正在嘗試爲AJAX
創建高效的JSON
響應控制器。到目前爲止,我並沒有將整個實體傳遞給JsonResponse
,而是在內部創建了具有必要數據的陣列,我可以輕鬆管理輸出數據,從而爲JavaScript
減少了工作量。我的動作看起來是這樣的:Symfony2 - 與關係作爲json響應的實體
public function getOffersAction(Request $request)
{
if (!$request->isXmlHttpRequest()) {
return new JsonResponse(array('message' => 'You can access this only using Ajax!'), 400);
}
/** @var OfferRepository $offerRepository */
$offerRepository = $this->getDoctrine()->getRepository('IndexBundle:Offer');
$offers = $offerRepository->findBy(array('state' => 'available'));
$offersArray = array();
/** @var Offer $offer */
foreach ($offers as $offer) {
$areasArray = array();
foreach ($offer->getAreas() as $area) {
$areasArray[] = array(
'name' => $area->getName()
);
}
$offersArray[] = array(
'id' => $offer->getId(),
'code' => $offer->getCode(),
'title' => $offer->getTitle(),
'city' => $offer->getCity(),
'country' => $offer->getCountry()->getName(),
'latitude' => $offer->getLatitude(),
'longitude' => $offer->getLongitude(),
'areas' => $areasArray
);
}
return new JsonResponse($offersArray, 200);
}
這是所有好的,Ajax是工作快。
在這一點上,我開始搜索,如果這是一個正確的方法。我發現了大約JMSSerializerBundle其中序列化實體。我嘗試過使用它,但是我遇到了序列化關係以及如何使用JS
訪問相關實體數據的問題。這是如此複雜,爲JS
做了很多事情,我開始懷疑這是一個好方法。
您認爲如何?你有什麼經驗?哪種方法更好,爲什麼?
你有沒有考慮過使用[分形(http://fractal.thephpleague.com/) ?在JMSSerializer和手動構建控制器中的JSON數組之間,這是一個很好的中間地帶。 – dchesterton
使用JMSSerializerBundle時出現什麼問題?這個包在大多數情況下的確很像魅力 – VaN
你也可以讓你的實體序列化。如果我可以這樣說,那現在你的方法會更容易。可以在此處找到序列化的User實體的示例:http://symfony.com/doc/current/security/entity_provider.html#create-your-user-entity –