Symfony API Request неожиданный & quot; G & quot;

Я действительно сбит с толку этой ошибкой, которую я получаю при публикации в 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);
}

0

Решение

Ваш запрос не связан с формой, создайте форму с помощью компонента формы 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.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]