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

时间:2016-10-19 09:48:09

标签: php forms symfony symfony-forms

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

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

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

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但我希望它从数据类中获取值。

1 个答案:

答案 0 :(得分:2)

这是因为默认情况下POST次请求handleRequest方法会将$clearMissing参数设置为true的表单提交(设置不将参数发送到null:{{3} })。我想保留您的默认值,请使用:

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