【发布时间】:2018-01-10 00:55:41
【问题描述】:
我正在尝试在表单中指定默认值,因此在创建实体时,表单字段具有值(不是 null 或空)。然而,当实体被编辑时,它显然应该显示存储的值而不是默认值。
我的实体将自己初始化为构造的一部分 - 因此,当实体是新的且尚未持久化时,应设置这些值。
如何通知 FormType 使用默认值而不是持久化状态?我尝试的一切似乎都表明它是一个或另一个而不是两者?
Symfony 3.2+ 是怎么做到的???
编辑|
控制器:
public function newAction (Request $request)
{
$quoteItem = new QuoteItem();
$form = $this->createForm('UniflyteBundle\Form\QuoteItemType', $quoteItem, ['allow_extra_fields' => true]);
$form->add('QuoteFlight', QuoteFlightType::class);
}
表格类型:
public function configureOptions (OptionsResolver $resolver)
{
$resolver->setDefaults([
//'data' => new \UniflyteBundle\Entity\QuoteFlight()
'data_class' => QuoteFlight::class
]);
}
public function buildForm (FormBuilderInterface $builder, array $options)
{
$builder
->add('specMajorSetupCharge', null, [
//'empty_data' => QuoteFlight::SPEC_MAJOR_SETUP_CHARGE,
'data' => QuoteFlight::SPEC_MAJOR_SETUP_CHARGE,
'label' => '* Setups Charge'
])
// ...
}
【问题讨论】:
-
你的代码是什么样的?
-
对不起 - 我错过了 :)
-
如果我明确设置“数据”,那么这就是表单中始终显示的内容,基本上覆盖了实体值。我不明白为什么在构造实体时不使用实体的默认值 - 从数据库加载实体时也是如此
-
您是否有权访问
buildForm中的实体? -
我同意 - 我只是意识到我的错误:o 我的错。我有一个嵌入到另一个表单中的表单,每个表单有两个实体。我正在实例化的实体是最外层的实体,但我正在测试的表单绑定到最内层的实体。在我提交表单之前,该实体实际上并不存在。解决方法是在将父实体绑定到表单之前创建并设置最里面的实体。对此感到抱歉:)
标签: php symfony symfony-3.2