我正在使用strGuard插件进行Doctrine。
我想覆盖唯一用户名的默认错误消息。
我目前得到的是:“已存在具有相同”用户名“的对象。”。
所以,我试过这样做:
$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个错误:我和默认错误。
如何才能修复代码的第二部分才能只输出一条消息?
答案 0 :(得分:5)
将此方法添加到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;
}