gpt4 book ai didi

forms - FOSRestBundle 将 json 数据发布到表单不起作用

转载 作者:行者123 更新时间:2023-12-05 01:00:46 28 4
gpt4 key购买 nike

我正在将 JSON 数据发布到 Controller 中的表单。该实体没有填充我发送的属性,它是这样的:

// Controller

class UserApiController extends FOSRestController
{
// works fine
public function cgetAction()
{
return $this->get('model.user')->getAllUsers();
}

// works fine
public function getAction($id)
{
return $this->get('model.user')->getUserById($id);
}

// this method fails
public function postAction(Request $request)
{
$form = $this->createForm(new UserType(), new User());
$form->bind($request);

if($form->isValid())
{
die('are you valid or not??');
}

return $this->view($form, 400);
}
}

实体看起来像一个普通的实体,也是一个形式。

我有一个将 json 数据发送到 api 的测试 Controller :
public function testJsonPostAction()
{
$client = static::createClient();
$client->request(
'POST',
'/api/1.0/users',
array(),
array(),
array('CONTENT_TYPE' => 'application/json'),
'{"firstName": "John", "lastName": "Doe", "emailAddress": "something@somewhere.com", "sex": "1"}'
);

var_dump($client->getResponse()->getContent());
}

和验证:
Software\Bundle\Entity\User:
properties:
firstName:
- NotBlank: ~
- Length:
min: 2
max: 255
lastName:
- NotBlank: ~
- Length:
min: 2
max: 255

好的,问题是 $form 总是无效的。当我转储 $form->getData() 内容时,我得到了我的用户实体,但没有填写名字、姓氏等。相反,我显然得到了验证错误,但这是另一个:

为什么 $form->bind($request) (我知道它已被弃用)返回这个(这更不好):
{"code":400,"message":"Validation Failed","errors":{"children":{"firstName":{"errors":["This value should not be blank."]},"lastName":{"errors":["This value should not be blank."]},"emailAddress":{"errors":["This value should not be blank."]},"sex
":[],"locale":[]}}}

和相同的代码,但 $form->handleRequest($request) 返回:
{"children":{"firstName":[],"lastName":[],"emailAddress":[],"sex":[],"locale":[]}}

有什么不同?因为我认为 handleRequest 是 bind 的替代品。
我已经尝试过我认为互联网上的所有解决方案每次都是不同的,我无法让它工作。 FOSRestBundle 的文档很差,它说的都是关于获取东西,但几乎没有关于发布。

非常感谢任何帮助。

最佳答案

既然没人回答,我就在这个问题上回答自己。

首先,发送的 JSON 必须以表单名称开头,因此:

{"firstName": "John", "lastName": "Doe", "emailAddress": "something@somewhere.com", "sex": "1"

必须是:
{"user": {"firstName": "John", "lastName": "Doe", "emailAddress": "something@somewhere.com", "sex": "1"}}

就我而言,表单名称是“用户”。

我已经使用 CURL 来测试它:
curl -v -H "Accept: application/json" -H "Content-type: application/json" -XPOST -d "{\"user\":{\"firstName\":\"John\", \"emailAddress\": \"somewhere@somehow.com\", \"password\":\"verystrongmuchpower\"}}" http://localhost.software.com/app_dev.php/api/1.0/users

由于我正在使用 CURL 测试 API,因此 bind 和 handleRequest 中的响应差异消失了。

如果我得到更多结论,我会尽快更新这个答案。

关于forms - FOSRestBundle 将 json 数据发布到表单不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29068120/

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