Ответ Symfony JSON возвращает контент дважды - PullRequest
1 голос
/ 10 апреля 2019

Я писал API, используя Symfony в качестве бэкэнда, плагин, написанный третьей стороной, отправляет определенные данные в конечную точку, затем конечная точка возвращает ответ в кодировке json, однако, следуя инструкциям, изложенным втекущая документация Symfony (https://symfony.com/doc/current/components/http_foundation.html), возвращаемое значение отображается дважды, а ответ неправильно сформирован и выводит как строка

Исходный метод, который я написал, имел вызовы в базу данных для проверки токена, хранилищезакладка и отображение результата процесса бэкэнда, однако при переходе к медленным действиям и удалению всего, кроме построения ответа, очевидно, что именно в этом проблема. Метод использует этот фрагмент, хотя для ясности я не включилобработка базы данных и использование опубликованных значений в качестве возвращаемого массива; результат будет таким же, если это будут опубликованные или обработанные данные, выходные данные отобразятся дважды.

$token = $request->request->get('token');
$bookmark = $request->request->get('bookmark');
$data = ['token' => $token, 'bookmark' => $bookmark];
$response = new Response();
$response->headers->set('Access-Control-Allow-Origin', '*');
$response->setContent(json_encode($data));
$response->send();
return $response;

То, что я ожидал, было одним ответом jsonно что возвращаетсяявляется двойной строкой вывода json

например, если я разместил эти значения в приведенном выше фрагменте:

token: ksjdbvqpi8e7rqp7evbprb
bookmark: http://www.google.com

, то результат будет

    {"token":"ksjdbvqpi8e7rqp7evbprb", "bookmark":"http:\/\/www.google.com"}{"token":"ksjdbvqpi8e7rqp7evbprb", "bookmark":"http:\/\/www.google.com"}

, когда яожидалось было просто

{"token":"ksjdbvqpi8e7rqp7evbprb", "bookmark":"http:\/\/www.google.com"}

В настоящий момент я понятия не имею, почему он отображается дважды, любая помощь, как всегда, ценится.

Спасибо

1 Ответ

2 голосов
/ 10 апреля 2019

$response->send(); - строка, которую следует удалить.

Поскольку вы уже возвращаете объект класса Response, symfony позаботится о выводе этого ответа в браузер, вам не нужно делать это вручную с send().

...