Пустые объекты JsonResponse [дубликат]

Посмотрите на этот пример:

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope,$http) {

    var getJoke = function(){
        return $http.get('http://api.icndb.com/jokes/random').then(function(res){
            return res.data.value;  
        });
    }

    getJoke().then(function(res) {
        console.log(res.joke);
    });
});

Как вы можете видеть, getJoke возвращает разрешенное обещание (оно разрешено при возврате res.data.value). Таким образом, вы ждете, пока запрос $ http.get не будет завершен, а затем выполнится console.log (res.joke) (как обычный асинхронный поток).

Это plnkr:

http://embed.plnkr.co/XlNR7HpCaIhJxskMJfSg/

9
задан Giancarlo Ventura Granados 25 January 2015 в 21:37
поделиться

5 ответов

Вам нужно сделать это (на основе предыдущего ответа):

public function getAllCategoryAction() {
    $em = $this->getDoctrine()->getManager();
    $query = $em->createQuery(
        'SELECT c
        FROM AppBundle:Categoria c'
    );
    $categorias = $query->getArrayResult();

    $response = new Response(json_encode($categorias));
    $response->headers->set('Content-Type', 'application/json');

    return $response;
}

Он отлично работает с любым запросом, который Doctrine возвращает как массив.

8
ответ дан Krzysztof Trzos 25 August 2018 в 06:13
поделиться

Похоже, вы пытаетесь ответить на коллекцию. Для этого вам нужно настроить сериализатор (или получить данные в виде массива).

Посмотрите на страницы этого документа: http://symfony.com/doc/current/components/http_foundation/introduction.html#creating-a-json-response

и

http://symfony.com/doc/current/cookbook/serializer.html .

1
ответ дан Alex 25 August 2018 в 06:13
поделиться

Вам нужно изменить свой код следующим образом:

/**
 * @Route(
 *      "/drop/getCategory/",
 *      name="getCategory"
 * )
 * @Method("GET")
 */
public function getAllCategoryAction() {
    $categorias = $this->getDoctrine()
                       ->getRepository('AppBundle:Categoria')
                       ->findAll();

    $categorias = $this->get('serializer')->serialize($categorias, 'json');

    $response = new Response($categorias);

    $response->headers->set('Content-Type', 'application/json');
    return $response;
}

Если служба serializer не включена, вы должны включить ее в app/config/config.yml:

    framework:
        # ...
        serializer:
            enabled: true

Для более сложных опций для сериализации вы можете установить JMSSerializerBundle

1
ответ дан Alexandru Furculita 25 August 2018 в 06:13
поделиться

Я думаю, что ответ @darkangelo требует объяснений.

Метод findAll() возвращает коллекцию объектов.

$categorias = $this->getDoctrine()
                   ->getRepository('AppBundle:Categoria')
                   ->findAll();

Чтобы построить ответ, вам нужно добавить все получатели ваших объектов к вашему ответу:

$arrayCollection = array();

foreach($categorias as $item) {
     $arrayCollection[] = array(
         'id' => $item->getId(),
         // ... Same for each property you want
     );
}

return new JsonResponse($arrayCollection);

Использование QueryBuilder позволяет возвращать результаты в виде массивов, содержащих все свойства:

$em = $this->getDoctrine()->getManager();
$query = $em->createQuery(
    'SELECT c
    FROM AppBundle:Categoria c'
);
$categorias = $query->getArrayResult();

return new JsonResponse($categorias);

getArrayResult() избегает необходимости геттеров.

12
ответ дан chalasr 25 August 2018 в 06:13
поделиться

Я предлагаю следующее решение:

/**
     * @Route(
     *      "/drop/getCategory/",
     *      name="getCategory"
     * )
     * @Method("GET")
     */
    public function getAllCategoryAction() {
        $em = $this->getDoctrine()->getManager();
        $query = $em->createQuery(
            'SELECT c
            FROM AppBundle:Categoria c'
        );
        $categorias = $query->getArrayResult();


        return new Response(json_encode($categorias), 200);
}
0
ответ дан whiteletters in blankpapers 25 August 2018 в 06:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: