なぜ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 とアクション/サービスを自分で構築する必要があります。