VladimirAndreev
@VladimirAndreev
php web dev

Как отдавать json в symfony2?

Конечно, есть такой способ:



$data = json_encode( array('type'=>$type,'params'=>$params) );<br>
$headers = array( 'Content-type' => 'application-json; charset=utf8' );<br>
$responce = new \Symfony\Component\HttpFoundation\Response( $data, 200, $headers );<br>
return $responce;<br>




но нет ли чего-то более идеологически правильного?:)
  • Вопрос задан
  • 12952 просмотра
Пригласить эксперта
Ответы на вопрос 5
@faost
У вас и есть идеологически правильный вариант: смысл controller-а получить HTTP-запрос, а затем сформировать и вернуть HTTP-ответ (объект Symfony\Component\HttpFoundation\Response) что у вас и происходит. Только MIME type для json правильней application/json.

В документации кстати есть пример вовзрата json:

use Symfony\Component\HttpFoundation\Response;

...
$response = new Response(json_encode(array('name' => $name)));
$response->headers->set('Content-Type', 'application/json');
Ответ написан
Комментировать
VladimirAndreev
@VladimirAndreev Автор вопроса
php web dev
йа кретино :)

routing.yml:
ExampleBundle_loadData: pattern: /data.{_format}/{type}/{params} defaults: { _controller: ExampleBundle:Default:loadData, _format:json } requirements: { _format: json|xml }

контроллер:
    public function loadDataAction($type, $params)
    {
        $return = array('type'=>$type,'params'=>$params);        
        return $this->render('ExampleBundle:Default:ajax.json.twig', array('data'=>$return));
    }


шаблон (twig)
{{data|json_encode|raw}}
Ответ написан
@zipppp
Ясно, что старый вопрос, но вышел на него так же через поиск.
Официальное решение:

use Symfony\Component\HttpFoundation\Response;

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


ссылка на статью документации

И никаких view компонентов
Ответ написан
Комментировать
AnisimovAM
@AnisimovAM
Программист
$response = new JsonResponse(['text' => 'text']);
return $response;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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