尝试更新实体并提交具有未更改值的字段会导致类型错误。我究竟做错了什么?
实体:
<?php
namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;
...
class User implements UserInterface
{
...
/**
* @ORM\Column(type="bigint", nullable=true)
* @Groups({"default", "listing"})
* @Assert\Type("integer")
*/
private $recordQuota;
...
表格类型:
<?php
namespace App\Form;
...
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
...
->add('recordQuota', IntegerType::class)
;
}
...
}
控制器:
...
/**
* @Route("/api/user/{id}", name="editUser")
* @Method({"PUT", "PATCH"})
* @Rest\View()
*/
public function updateAction(Request $request, User $user)
{
$form = $this->createForm(UserType::class, $user);
$data = $request->request->get('user');
$clearMissing = $request->getMethod() != 'PATCH';
$form->submit($data, $clearMissing);
if ($form->isSubmitted() && $form->isValid()) {
...
我正在使用 PostMan 提交表单数据。如果我正在更新的实体的 recordQuota 为 1000,我提交的表单具有不同的值。这一切都有效和更新。
但是,如果我使用 recordQuota: 1000 提交我的表单,这应该使值保持不变,我会收到一个不正确的类型错误:
"recordQuota": {
"errors": [
"This value should be of type integer."
]
}
附加信息:
我正在使用$form->submit
而不是handleRequest
因为我正在使用补丁。所以我需要能够启用/禁用$clearMissing
. 但即使使用也会handleRequest
产生同样的问题。
即使在将它传递给表单之前将 recordQuota 类型转换为 int 仍然失败。
如果我从表单和实体中删除所有类型信息,我会在实际进行更改时得到“这个值应该是字符串类型”。