我無法理解爲什麼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來處理驗證的操作/服務。