Symfony 表单在提交后使用数据 class 的默认值

Symfony form use defaults from data class after submit

当某些字段未提交时,我在使用 Symfony 表单时遇到问题。

我有数据 class FormData,其中有一些默认值 public $page = 1。我在创建表单时使用 class。当我提交表单并且该特定字段不在请求中时,数据 class 中的值重置为 null。虽然我希望它保持默认状态 (1),因为它最初在数据 class.

我有以下数据class(简化版):

class FormData
{
    /**
     * @Assert\Type("int")
     * @var integer
     */
    public $page = 1;
}

我有表格类型:

class FormType extends AbstractType
    {
        public function buildForm(FormBuilderInterface $builder, array $options)
        {
            $builder
                ->add('page', IntegerType::class);
        }
        public function configureOptions(OptionsResolver $resolver)
        {
            $resolver->setDefaults(array(
                'empty_data' => new FormData()
            ));
        }
    }

这就是我使用表格的方式:

    // $request->has('page') is false 
    $form = $this
        ->formFactory
        ->createNamedBuilder('', EntitiesType:class, new FormData())
        ->getForm();
    $form->handleRequest($request);
    $data = $form->getData(); 
    // $data->page is null while I want it to be 1 

是否有任何解决方案可以将 $data->page 的值保持为 1

PS:我知道如果我对特定字段配置执行 ->add('page', IntegerType::class, ['empty_data' => '1']),那么该值将设置为 1,但我希望它从数据中获取值class.

这是因为默认情况下 POST 请求 handleRequest 方法提交表单时 $clearMissing 参数设置为 true(设置不发送参数为空:https://github.com/symfony/form/blob/master/Form.php#L562).如果您想保留默认值,请使用:

$form->submit($data, false);