Php FOSRestBundle-修补程序无法正常工作

Php FOSRestBundle-修补程序无法正常工作,php,symfony,fosrestbundle,Php,Symfony,Fosrestbundle,我想用“补丁”方法更新实体(仅更新已提交的字段) 表格: 我将“eng”的实体设置为TRUE。 如果我运行查询仅更新标题字段,eng将更改为false。和说明设置为空。知道为什么吗?我认为,因为您没有使用请求正文转换器,而是手动定义路由,所以需要设置表单的方法 试着这样做: $editForm = $this->createForm( 'ContentBundle\Form\ContentType', $content, ['method' => 'PATCH'

我想用“补丁”方法更新实体(仅更新已提交的字段)

表格:

我将“eng”的实体设置为
TRUE

如果我运行查询仅更新
标题
字段,
eng
将更改为
false
。和
说明
设置为空。知道为什么吗?

我认为,因为您没有使用请求正文转换器,而是手动定义路由,所以需要设置表单的方法

试着这样做:

$editForm = $this->createForm(
   'ContentBundle\Form\ContentType', 
   $content, 
   ['method' => 'PATCH']
);
我要让它工作

请记住,如果您想使用
PATCH
方法,您需要在表单中使用
TextType
而不是
ChoiceType

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('title', TextType::class)
            ->add('description', TextareaType::class)
            ->add('eng', TextType::class);
    }

当有修补程序请求时,您需要将
false
作为第二个参数传递给
Form::submit()
,以便不会清除缺少的属性。如果您碰巧使用修补程序将布尔值更新为false,则可能无法工作。有关更多详细信息和解决方案,请参见此问题:
$editForm = $this->createForm(
   'ContentBundle\Form\ContentType', 
   $content, 
   ['method' => 'PATCH']
);
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('title', TextType::class)
            ->add('description', TextareaType::class)
            ->add('eng', TextType::class);
    }