gpt4 book ai didi

symfony - 如何让 Symfony 表单与 REST API 一起使用?

转载 作者:行者123 更新时间:2023-12-04 13:23:02 27 4
gpt4 key购买 nike

我目前正在尝试让 symfony 表单与我的帖子一起工作并放置 rest api 端点。

目前我有:

$request = $this->getRequest();
$cc = new CreditCard();
$form = $this->createForm(new CreditCardType(), $cc);

$form->handleRequest($request);

if ($form->isValid()) {
//...
}

但是,该表格永远无效。查看问题,似乎表单的 isSubmitted 字段为 false,因此它从未通过验证。另外,由于这是一个 api 调用,我将 creditcardtype 中的 csrf_protection 设置为 false。

以下是我让用户提交的数据示例:
{
"credit_card": {
"name" : "Example Name"
...
}
}

我如何让这个 post/put 请求被注册为提交并让表单验证器通过?谢谢。

最佳答案

如果您可以提供 CreditCardType 类的完整代码以及完整的 POST 数据和表单中的验证错误,那将会很有帮助。

无论如何,这是我发现表单提交失败的原因:

  • 提交不完整的数据:如果您的 CerditCardType 表单中有一个字段在您的 POST 请求中不存在,请确保它的选项“必需”设置为 false。
  • 表单名称:确保您的所有字段都由以您的表单名称(您在 CreditCardType::getName() 方法中提供的名称)命名的属性包装。在你的情况下,我假设是“credit_card”。
  • 只发布在您的 CreditCardType 类中定义的字段。如果您发布的参数与表单的任何字段都不匹配,您将收到验证错误,例如“此表单不应有任何额外字段”或类似内容。

  • 无论如何,如果您提供更多信息,我很乐意提供更多帮助。

    更新:

    好的,我认为您的问题是您将数据作为 JSON 字符串发布,而 handleRequest()方法没有获取任何数据,因为 Symfony 不知道它应该从请求的正文中解码(它希望数据作为 $_GET 或 $_POST 参数发送)。所以你必须自己做。

    而不是使用 handleRequest()您必须使用 submit() 的方法使用通过解码请求内容获得的数据的方法( $request->getContent() ):
    $request = $this->getRequest();
    $cc = new CreditCard();
    $form = $this->createForm(new CreditCardType(), $cc);

    // Decode de JSON input
    $data = json_decode($request->getContent(), true);

    // Post the data to the form
    $form->submit($data);

    if ($form->isValid()) {
    //...
    }

    希望它现在有帮助!

    顺便说一句,如果您正在研究 RESTful 实现,您真的应该考虑使用 FOSRestBundle捆。它将为您处理所有格式转换逻辑以及路由、实体反/序列化等。

    关于symfony - 如何让 Symfony 表单与 REST API 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24834829/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com