2011-07-18 4 views
2

私はDoctrineにsfGuardプラグインを使用しています。Symfony - 他のバリデータをオーバーライドしないでポストバリデータのエラーメッセージを変更しますか?

一意のユーザー名のデフォルトのエラーメッセージを上書きしたい。

私が現在入手しているものは次のとおりです: "同じ"ユーザー名 "のオブジェクトが既に存在します。"

だから、私はこれをやってみました:

動作しませんでした
$this->validatorSchema->getPostValidator('username')->setMessage('invalid', 'The username is already taken.'); 

は、それから私はまた

$this->mergePostValidator(
    new sfValidatorDoctrineUnique(
    array(
     'model' => 'sfGuardUser', 
     'column' => array('username'), 
     'throw_global_error' => false 
    ), 
    array(
     'invalid' => 'The username is already taken.' 
    ) 
) 
); 

を試してみましたが、今私はoutputed 2つのエラー取得しています:鉱山とデフォルトのものを。

メッセージの出力を1つだけにするには、コードの2番目の部分を修正するにはどうすればよいですか?

編集:http://trac.symfony-project.org/ticket/9426

答えて

5

BaseDoctrineFormに、このメソッドを追加します。次に、あなたが行うことができますあなたのconfigureメソッド(またはどこかesle)に:

public function configure() 
{ 
    $this->getPostValidatorUnique(array('username'))->setMessage('invalid', 'IN YOUR FACE'); 
} 

方法:

/** 
* @param array $columns 
* @param sfValidatorBase $validator 
* @return sfValidatorDoctrineUnique 
*/ 
public function getPostValidatorUnique($columns, $validator = null) 
{ 
    if ($validator === null) 
    { 
    $validator = $this->getValidatorSchema()->getPostValidator(); 
    } 
    if ($validator instanceof sfValidatorDoctrineUnique) 
    { 
    if (!array_diff($validator->getOption('column'), $columns)) 
    { 
     return $validator; 
    } 
    } 
    elseif (method_exists($validator, 'getValidators')) 
    { 
    foreach($validator->getValidators() as $childValidator) 
    { 
     if ($matchingValidator = $this->getPostValidatorUnique($columns, $childValidator)) 
     { 
     return $matchingValidator; 
     } 
    } 
    } 
    return null; 
} 
+0

うわー、これは本当に、感謝を:)働きました。 – Tool

+0

手を下ろす男!それはPropelで動作します(クラス名を置き換えるだけです)。 – mppfiles

関連する問題