我正在为Doctrine使用sfGuard插件.
我想覆盖唯一用户名的默认错误消息.
我目前得到的是:"已存在具有相同"用户名"的对象."
所以,我尝试这样做:
$this->validatorSchema->getPostValidator('username')->setMessage('invalid', 'The username is already taken.');
Run Code Online (Sandbox Code Playgroud)
这没用.
然后我也试过了
$this->mergePostValidator(
new sfValidatorDoctrineUnique(
array(
'model' => 'sfGuardUser',
'column' => array('username'),
'throw_global_error' => false
),
array(
'invalid' => 'The username is already taken.'
)
)
);
Run Code Online (Sandbox Code Playgroud)
现在我输出了两个错误:我和默认的错误.
我如何修复代码的第二部分,以便只输出一条消息?
添加此方法BaseDoctrineForm.然后,在您的配置方法(或任何地方的esle)中,您可以执行以下操作:
public function configure()
{
$this->getPostValidatorUnique(array('username'))->setMessage('invalid', 'IN YOUR FACE');
}
Run Code Online (Sandbox Code Playgroud)
方法:
/**
* @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;
}
Run Code Online (Sandbox Code Playgroud)