1

なぜSymfonyがこれを行うのか理解できません。

UserFormType クラスがあるとします

->add(username);
->add(datecreated);

テンプレートに dateCreated を表示しないようにすると、symfony はデータベースの値を上書きする を設定DateCreatedします。null

その値をnullに設定しないことの問題を知りたいのですが、テンプレートにない場合は元の値を持っているだけです

4

2 に答える 2

1

ドキュメントから: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)は、小枝で使用して、欠落しているすべてのフィールドをレンダリングできます。

于 2012-08-17T05:56:41.040 に答える
1

これは古いトピックですが、私は同じ状況に遭遇しました。これを処理する最も簡単でクリーンな方法は、何もしたくないときにフォームからフィールドを削除することでした。

たとえば、ユーザーが所属しているグループのリストを表示したいのですが、他のユーザーはそれらを見ることができません。その結果、これらのユーザーが変更を加えると、既に所有していたグループが削除されました。

ソリューション:

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

于 2015-01-29T06:33:32.783 に答える