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();"。我删除了它,我的问题就解决了。我希望我的解决方案对某人有所帮助。