Ответ Symfony json дважды возвращает контент

Я писал 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"}

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

Спасибо

Удалить $response->send();.

u_mulder 10.04.2019 10:54

Как сказал @u_mulder, вы должны удалить часть $response->send(). Вы уже ответили контроллером на symfony. Затем Symfony выполняет другие действия, включая обработку самой команды отправки, вам не нужно этого делать.

J. Knabenschuh 10.04.2019 11:42

@u_mulder спасибо, если вы добавите это в качестве ответа, я отмечу это как правильное, спасибо

JimmyBorofan 10.04.2019 12:27
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
476
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Другие вопросы по теме