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