2014-02-09 3 views
0

У меня есть небольшой REST API в моем проекте. И, конечно, я использую json в качестве моих возвращаемых данных для работы.Symfony конвертировать сущность в формат json путем циклирования foreach

Я использую symfony в backend и angularJs в интерфейсе. На данный момент я конвертирую свою сущность в json, зацикливая истинный результат и заполняя массив данных, чтобы вернуться как json.

Пример:

public function getAction($id) 
{ 
    $em = $this->getDoctrine()->getManager(); 

    $warehouseId = $this->get('session')->get('warehouse'); 
    $warehouse = $em->getRepository('BubbleMainBundle:Warehouse')->find($warehouseId); 

    $trip = $em->getRepository('BubbleMainBundle:Trip')->find($id); 

    $data = array(
     'id'  => $trip->getId(), 
     'driver' => $trip->getDriver(), 
     'status' => $trip->getStatus(), 
     'date' => $trip->getPlanningDate()->format('Y-m-d') 
    ); 

    if (count($trip->getStops()) > 0) { 

     foreach($trip->getStops() as $stop) 
     { 
      $data['assignedStops'][] = array(
       'id' => $stop->getId(), 
       'status' => $stop->getStatus(), 
       'date' => $stop->getDeliveryDate()->format('Y-m-d'), 
       'sort' => $stop->getSort(), 
       'company' => array(
        'name' => $stop->getToCompany()->getName(), 
        'lat' => $stop->getToCompany()->getLat(), 
        'lng' => $stop->getToCompany()->getLng(), 
        'address' => $stop->getToCompany()->getAddress(), 
        'zip' => $stop->getToCompany()->getZip() 
       ), 
      ); 
     } 
    } else { 

     $data['assignedStops'][] = ''; 
    } 

    $response = new jsonResponse(); 
    $response->setData($data); 

    return $response; 
} 

Это работает. Но иногда у меня есть (хронологическая шкала Google Chrome), ожидающая ответа 6 секунд для простого запроса и ответа json.

Является ли переплетение истинным сущностью? Или мне нужен другой подход для преобразования моих объектов в формат json?

ТНХ Антони,

ответ

0

Если вы используете PHP 5.4 или выше, а затем рассматривает возможность использования интерфейса JsonSerializable с вашими лицами:

http://www.php.net/manual/en/class.jsonserializable.php

Это позволит вам контролировать, как ваши объекты преобразуются в JSON, который позволит вам называть json_encode непосредственно на ваших объектах без необходимости циклического преобразования и преобразования их в массивы.

Что касается проблемы с производительностью, вам нужно будет профилировать свой скрипт, чтобы узнать, где узкое место производительности. От взгляда на ваш код одна потенциальная проблема, которую вы, возможно, захотите изучить, состоит в том, чтобы убедиться, что вы извлекаете все данные в исходном запросе (например, останавливается и компании), и вы не выполняете дополнительные запросы в цикле foreach, чтобы получить отсутствующие стоп и данные компании.

0

Я рекомендую вам (так как вы используете Symfony2 в качестве движка и вам нужен API), чтобы определенно попробовать это bundle ... Это простой в использовании и настройке, а также дополнительно вы можете создать хороший documentation для Это. Это ускорит вашу разработку и код.

Смежные вопросы