Я писал 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"}
На данный момент я понятия не имею, почему он отображается дважды, любая помощь, как всегда, приветствуется.
Спасибо
Как сказал @u_mulder, вы должны удалить часть $response->send()
. Вы уже ответили контроллером на symfony. Затем Symfony выполняет другие действия, включая обработку самой команды отправки, вам не нужно этого делать.
@u_mulder спасибо, если вы добавите это в качестве ответа, я отмечу это как правильное, спасибо
$response->send();
— это строка, которую следует удалить.
Поскольку вы уже возвращаете объект класса Response
, symfony позаботится о том, чтобы выход этот ответ браузеру, вам не нужно делать это вручную с помощью send()
.
Удалить
$response->send();
.