2015-02-27 1 views
0

Я пытаюсь написать веб-службы в своем проекте Symfony2, который предоставит данные JSON.веб-сервисы с Symfony2

Я определил маршрут, чтобы выбрать контроллер, который будет обрабатывать запросы и ответы от веб-сервиса:

_api_v1__get_products: 
pattern: /v1/products/{_locale}.{_format} 
defaults: { _controller: ProductsBundle:Api:products, _format: json, _locale: en-US} 
requirements: 
    _method: GET 

Контроллер:

public function productsAction() { 

    $em = $this->getDoctrine()->getManager(); 

    $repository = $em->getRepository('ProductsBundle:Products'); 

    $products = $repository->getAll(); 

    //var_dump($products); die; 

    return new Response(json_encode(array('products' => $products))); 
} 

проверить с var_dump ($ продукты), и все работает.

но в ответ я получаю пустой JSON:

{"products":[{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{},{}]} 

некоторую помощь? спасибо

+0

Просто к сведению, но вы можете установить необходимые методы с использованием 'методы: [GET]', а не 'requirements._method: GET'. – qooplmao

ответ

1

Это потому, что ваш $products - это массив сущностей, а php не знает, как сериализовать entity в json. Вам нужно изменить getAll() на что-то вроде:

$repository = $em->getRepository('ProductsBundle:Products'); 

$products = $repository->createQueryBuilder('p') 
       ->getQuery() 
       ->getArrayResult(); 

Это сделает ваш $products простой массив, который будет сериализации по json_encode функции.

Смотрите мой answer на подобный случай

+0

Спасибо @ Томас. Оно работает! –