簡體   English   中英

Symfony - 在不覆蓋其他驗證器的情況下更改后驗證器的錯誤消息?

[英]Symfony - change error message of a post validator without overriding other validators?

我正在為 Doctrine 使用 sfGuard 插件。

我想覆蓋唯一用戶名的默認錯誤消息。

我目前得到的是:“已經存在具有相同“用戶名”的 object。”。

所以,我試着這樣做:

$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.'
    )
  )
);

現在我輸出了 2 個錯誤:我的錯誤和默認錯誤。

如何修復代碼的第二部分以便只輸出 1 條消息?

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

將此方法添加到BaseDoctrineForm 然后,在您的配置方法(或任何地方)中,您可以執行以下操作:

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM