2

私は Symfony Framework を初めて使用し、フォームの検証で問題が発生しました。

ユニークカラムを含むDBのデータを更新したいのですが、ユニークカラムに変更がない場合、エラーが返されます(同じ「ドメイン」を持つオブジェクトが既に存在します。) ドメインカラムはユニークである必要がありますが、ユーザーは変更できる必要があります。したがって、あるユーザーが自分のドメイン名を保存すると、他のユーザーはそのドメイン名を使用できなくなりますが、後で変更することはできます。

フォームの検証では、一意の列を他の行だけでなく、それ自体とも比較しているようです。したがって、ユーザーが列を変更せずにフォームを保存すると、エラーが返されます。

列の一意性を維持しながら自由に変更するには、どの検証を使用する必要がありますか?

4

5 に答える 5

4

これは古い質問かもしれませんが、問題に遭遇して解決策を見つけたので、このエラーの原因についてさらに詳しく説明します。

私の場合、Validator は isUpdate() メソッドに対して true を返しませんでした。これは、「id」フィールドが設定されていなかったためです。

この問題を回避するには、設定されていないフィールドから「id」を削除し、sfWidgetFormInputHidden に変更します。

于 2011-08-31T14:48:56.677 に答える
3

Doctrine を使用していてバリデーターがsfValidatorDoctrineUniqueの場合、意図したとおりに動作するはずです。

つまり、オブジェクトを更新しているかどうかを検証します。102 行を参照してください。

于 2010-07-02T14:37:30.673 に答える
2

isUpdate() を作成するには、$this->form->setPostValidator(); を使用する必要があります。

$this->validatorSchema->setPostValidator( new sfValidatorDoctrineUnique(array('model' => 'Model', 'column' => 'column_name')) );

于 2013-04-02T11:19:27.437 に答える
1

あなたは部分的に正しいですが、問題は、誰かが他のフィールドを変更したい場合、一意でありながら同じままである場合、問題が残ることです。自分でやる以外に、これを防ぐ方法はありません:/

于 2011-03-22T08:23:14.860 に答える