なぜSymfonyがこれを行うのか理解できません。
UserFormType クラスがあるとします
->add(username);
->add(datecreated);
テンプレートに dateCreated を表示しないようにすると、symfony はデータベースの値を上書きする を設定DateCreated
します。null
その値をnullに設定しないことの問題を知りたいのですが、テンプレートにない場合は元の値を持っているだけです
なぜSymfonyがこれを行うのか理解できません。
UserFormType クラスがあるとします
->add(username);
->add(datecreated);
テンプレートに dateCreated を表示しないようにすると、symfony はデータベースの値を上書きする を設定DateCreated
します。null
その値をnullに設定しないことの問題を知りたいのですが、テンプレートにない場合は元の値を持っているだけです
ドキュメントから: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.
したがって、すべてのフィールドをレンダリングする必要があります。そうしないと、null に設定されます。
フォームに追加することはできず、Symfony は更新時にその値をそのままにしておきます。とにかくコードで dateCreated を設定していると思いますので、そのフィールドを更新しようとする Forms ライブラリは必要ありません。
もう 1 つのオプションは、フィールドを非表示フィールドとして追加する->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');
}
}
グループが設定されている場合、フォームはグループを拒否し、フォームに options を追加できないようにします'allow_extra_fields' => true
。検証に合格し、何もしません。
それはきちんとしていますが、私は大ファンではありませんが、他の解決策は見当たりません。さもなければ、フォームシステムに組み込まれた symfony なしで検証を処理するために、html とアクション/サービスを自分で構築する必要があります。