[英]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 條消息?
將此方法添加到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.