Я действительно сбит с толку этой ошибкой, которую я получаю при публикации в API Книг Google. Последний ответ в этой функции срабатывает при публикации 1781100489
к форме. Затем эта форма запускается resultAction
функция. Вместо того, чтобы возвращать то, что я хочу, я получаю ошибку JSON.parse с неожиданным токеном в строке 1 столбца 1.
При тестировании с почтальоном, он дает мне это своеобразное сообщение в ответ Unexpected 'G'
, Что бы это могло значить? Я дамп переменной, как вы можете видеть, это прокомментировано, но не могу понять, почему это происходит.
Есть какие-нибудь подсказки?
public function findAction(Request $request)
{
$form = $this->createFormBuilder(null, ['csrf_protection' => false])
->add('Title', TextType::class)
->add('Search', SubmitType::class)
->getForm();
$form->handleRequest($request);
if($form->isValid()){
$json = file_get_contents("https://www.googleapis.com/books/v1/volumes?q=".$form->get('Title')->getData());
$response = json_decode($json, true);
if(array_key_exists('items', $response)){
return $this->render('BlogsiteBooksBundle:Pages:results.html.twig', [
'items' => $response['items']
]);
} else {
return new Response('Google did not have any items', 400);
}
}
//var_dump($request);
return new Response('Google Book Not Found', 404);
}
Ваш запрос не связан с формой, создайте форму с помощью компонента формы Symfony в контроллере и вручную в ветке, тогда имена параметров не совпадают. $form->handleRequest($request);
не могу найти заголовок, потому что ожидаем параметр с именем form[Title]
и вы проходите только Title
,
Решения:
1 — отправить вручную все заданные параметры в запросе
Изменить:
$form->handleRequest($request);
За это:
$form->submit($request->query->all());
2 — Измените имя ввода так, чтобы оно совпадало с ожидаемым именем Symfony, а используемый метод должен быть POST:
<form action="app_dev.php/find" method="post">
<input type="text" name="form[Title]" id="Title" value="">
<input type="submit" value="Search">
</form>
3 — Визуализируйте форму, используя форму ветки, чтобы избежать этой проблемы.
контроллер:
/**
* @Route(name="find", path="/find")
*/
public function findAction(Request $request)
{
$form = $this->createFormBuilder(null)
->add('Title', TextType::class)
->add('Search', SubmitType::class)
->getForm();
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$json = file_get_contents("https://www.googleapis.com/books/v1/volumes?q=".$form->get('Title')->getData());
$response = json_decode($json, true);
if (array_key_exists('items', $response)) {
return $this->render(
'BlogsiteBooksBundle:Pages:results.html.twig',
[
'items' => $response['items'],
]
);
} else {
$form->addError(new FormError('Google did not have any items'));
}
}
return $this->render('find.html.twig', ['form' => $form->createView()]);
}
Посмотреть find.html.twig:
{{ form(form) }}
Примечание: каждая точка является возможным решением, используйте только один из них, третий рекомендуется для простых форм Symfony.
Других решений пока нет …