2010-11-28 4 views
2

私はSymfony 1.4とDoctrineを使っています。 名前、親1、親2、親3、親4、親5の6つのフィールドを持つフォームがあります。 フォームが送信されたら、データベースで2つのものをチェックします。 1.名前フィールドは一意です 2.それはparent1、parent2、parent3、parent4、およびparent5の組み合わせは、データベースにはまだありません。これらの値はすべて整数(関連テーブルの主キー)ですが、一部のフィールドは空白のまま0になります。ユーザーが入力した順序に基づいてデータベースに格納されるため、順序は気にしませんがフォームが保存される前にコンビネーション自体が存在しないことを確認してください。symfony 1.4保存する前にデータベースエントリに対してフォームの値を確認する

ご協力いただければ幸いです!

答えて

4

sfValidatorCallbackを使用します。フォームのクラスでは、セットアップ()関数の中で次の行を追加します。

$this->validatorSchema->setPostValidator(new sfValidatorCallback(array('callback' => array($this, 'YOURCALLBACKFUNCTIONNAME')))); 

次に、あなたが同じファイルでこれを作成することができ、コールバック機能:

public function YOURCALLBACKFUNCTIONNAME($validator, $values) { 
    //Validate form here 
    //Access form items using $values['FORMNAME']; 
    //$error = new sfValidatorError($validator, 'A Error Message.'); 
    //$es = new sfValidatorErrorSchema($validator, array('FORMITEM' => $error); 
    //throw $es; 
    } 
+0

ワウ - 私は数日間この作業をしてきました!あまりにも多くのジョン、ありがとう、実行中です! – Lauren

+0

np、うまくいけばうれしい。 – jgallant

2

はDoctrineは実際にありますこれのためのバリデーター、sfValidatorDoctrineUnique。フォームでは、試してみてください。

public function configure() 
{ 
    parent::configure(); 
    $this->mergePostValidator(new sfValidatorDoctrineUnique(array(
     'model' => 'MyModelName', 
     'column' => array('name') 
))); 
    $this->mergePostValidator(new sfValidatorDoctrineUnique(array(
     'model' => 'MyModelName', 
     'column' => array('parent1', 'parent2', 'parent3', 'parent4', 'parent5') 
))); 
} 
+0

ありがとうございましたJeremy - 名前にはうまくいきますが、親カラムにはエラーは発生しません。たとえ同じ順序で置いても、dbエントリが複製されます。 – Lauren

+0

私はそれが生成しているクエリを見て、何がうまくいかないかを調べることをお勧めします。バリデータの問題はほとんどありません。 –

0

私はあなたの質問が教義についてですが、この答えを探しているとProeplを使用している人のために、このためのPropelのバリデータがあることを知っている:

別の有用なモデル関連するバリデーターはsfValidatorPropelUniqueバリデーターです。これは、フォームを介して入力された新しい値が、ユニークなインデックスを持つデータベース列の既存の値と競合しないことをチェックします。例えば、2人のユーザが同じログインを持つことができない、フォームとユーザーオブジェクトを編集するときに、あなたがこの列にsfValidatorPropelUniqueバリバリデータを追加する必要があります。

//独自のバリデータます$ form-> setValidator( 'ニックネームをPropelの'、new sfValidatorPropelUnique(array(' model '=>'ユーザー '、'列 '=> 'ログイン ')));

関連する問題