Symfony API 请求意外 "G"
Symfony API Request Unexpected "G"
我在 post 阅读 Google 书籍 API 时遇到的这个错误真的让我很困惑。当我 post 1781100489
表单时触发此函数中的最后一个响应。此表单然后运行 resultAction
函数。我没有返回我想要的结果,而是在第 1 行第 1 列中收到带有意外标记的 JSON.parse 错误。
当使用 Postman 进行测试时,它在响应中给了我这条奇怪的消息 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 - 使用 twig 表单呈现表单以避免此问题
控制器:
/**
* @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 表单。
我在 POSTMAN 中遇到了同样的错误。我寻找答案,但没有什么能满足我的问题。
我自己发现它们是我的 PHP 文件中的语句 "exit();"。我删除了它,我的问题就解决了。我希望我的解决方案对某人有所帮助。
我在 post 阅读 Google 书籍 API 时遇到的这个错误真的让我很困惑。当我 post 1781100489
表单时触发此函数中的最后一个响应。此表单然后运行 resultAction
函数。我没有返回我想要的结果,而是在第 1 行第 1 列中收到带有意外标记的 JSON.parse 错误。
当使用 Postman 进行测试时,它在响应中给了我这条奇怪的消息 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 - 使用 twig 表单呈现表单以避免此问题
控制器:
/**
* @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 表单。
我在 POSTMAN 中遇到了同样的错误。我寻找答案,但没有什么能满足我的问题。 我自己发现它们是我的 PHP 文件中的语句 "exit();"。我删除了它,我的问题就解决了。我希望我的解决方案对某人有所帮助。