我无法理解为什么Symfony会这样做。为什么Symfony将表单字段设置为null,如果它们不在模板中但是在formType中
假设我有UserFormType类
->add(username);
->add(datecreated);
现在我也不在我的模板显示dateCreated会那么symfony的设置DateCreated
到null
它将覆盖数据库值。
我想知道在没有设置该值的问题为null,如果它不是在模板
我无法理解为什么Symfony会这样做。为什么Symfony将表单字段设置为null,如果它们不在模板中但是在formType中
假设我有UserFormType类
->add(username);
->add(datecreated);
现在我也不在我的模板显示dateCreated会那么symfony的设置DateCreated
到null
它将覆盖数据库值。
我想知道在没有设置该值的问题为null,如果它不是在模板
从documentation只是初始值:Additionally, if there are any fields on the form that aren't included in the submitted data, those fields will be explicitly set to null.
所以你必须使你所有的领域,否则它们将被设为空。
你可以不在表单中添加它,Symfony会在更新时单独保留这个值,我猜你在代码中设置了dateCreated,所以你不需要表单库试图更新该字段。
另一种选择是将该字段添加为隐藏字段->add('dateCreated', 'hidden')
您需要在模板中渲染字段,并且Symfony将保留dateCreated数据。如果你正在渲染每一行,你可以在你的树枝中使用form_rest(form)
来渲染所有缺失的字段。
这是一个古老的话题,但我遇到了相同的情况,对于我来说,处理这个问题最简单最简单的方法就是当你不想对它做任何事情时从表单中删除该字段。
例如,我想显示一个用户连接到的组的列表,但其他一些用户看不到它们。结果是这些用户的任何更改都会删除他们已有的组。
解决办法:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(
FormEvents::PRE_SUBMIT,
function (FormEvent $event) {
$this->onPreSubmit($event);
}
);
.....
}
public function onPreSubmit(FormEvent $event)
{
$params = $event->getData();
if (!isset($params['groups'])) {
$event->getForm()->remove('groups');
}
}
现在你的形式将拒绝组,如果它被设置,以避免您可以添加到您的窗体选项'allow_extra_fields' => true
。它将通过验证并且不做任何事情。
虽然它很整洁,但我不是一个很大的粉丝,但是我看不到任何其他解决方案,或者您将不得不自己构建html,并且不使用在表单系统中构建的symfony来处理验证的操作/服务。