Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony-在不覆盖其他验证程序的情况下更改后期验证程序的错误消息?_Php_Symfony1 - Fatal编程技术网

Php Symfony-在不覆盖其他验证程序的情况下更改后期验证程序的错误消息?

Php Symfony-在不覆盖其他验证程序的情况下更改后期验证程序的错误消息?,php,symfony1,Php,Symfony1,我正在使用sfGuard插件来实现条令 我想覆盖唯一用户名的默认错误消息 我目前得到的是:已经存在具有相同用户名的对象 所以,我试着这样做: $this->validatorSchema->getPostValidator('username')->setMessage('invalid', 'The username is already taken.'); 这没用 然后我也试过了 $this->mergePostValidator( new sfValida

我正在使用sfGuard插件来实现条令

我想覆盖唯一用户名的默认错误消息

我目前得到的是:已经存在具有相同用户名的对象

所以,我试着这样做:

$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.'
    )
  )
);
现在我得到了两个输出错误:我的错误和默认错误

如何修复代码的第二部分以便只输出一条消息

编辑:

将此方法添加到BaseDoctrineForm。然后,在您的配置方法或任何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;
}

把手放下,伙计!甚至它只需替换类名就可以使用Propel。