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);
当某些字段未提交时,我在使用 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);