如何在Symfony中自定义DataTransformer错误消息?
我的简单数据转换器将数字转换为实体,反之亦然。这很像书中的例子如何在Symfony中自定义DataTransformer错误消息?,symfony,symfony-2.1,symfony-forms,symfony-2.3,Symfony,Symfony 2.1,Symfony Forms,Symfony 2.3,我的简单数据转换器将数字转换为实体,反之亦然。这很像书中的例子 reverseTransform方法将一个数字转换为一个实体,当它失败时,抛出一个带有描述性消息的TransformationFailedException: public function reverseTransform($number) { if (!$number) { return null; } $issue = $this->om ->getRepo
reverseTransform
方法将一个数字转换为一个实体,当它失败时,抛出一个带有描述性消息的TransformationFailedException
:
public function reverseTransform($number)
{
if (!$number) {
return null;
}
$issue = $this->om
->getRepository('AcmeTaskBundle:Issue')
->findOneBy(array('number' => $number))
;
if (null === $issue) {
throw new TransformationFailedException(sprintf(
'An issue with number "%s" does not exist!',
$number
));
}
return $issue;
}
但是,使用上述转换器的表单字段会收到一条通用错误消息“此值无效”。即使更改异常文本(我希望用作验证消息,但它不是…)也不会更改错误消息
如何显示异常文本而不是“此值无效”?因为symfony捕获此异常并设置自己的消息(字段不正确)。 如果要自定义此消息,必须将validator设置为此字段 也许我错了,但什么也没发现 例如:
public function reverseTransform($number)
{
if (!$number) {
return null;
}
$issue = $this->om
->getRepository('AcmeTaskBundle:Issue')
->findOneBy(array('number' => $number))
;
if (null === $issue) {
// Nothig action
//throw new TransformationFailedException(sprintf(
// 'An issue with number "%s" does not exist!',
// $number
//));
}
return $issue;
}
$builder
->add('you_field', 'text', array('invalid_message' => 'An issue number not found'))
->get('you_field')->addModelTransformer('....');
并将NotBlank/NotNull验证程序添加到字段
UPD
您可以在表单类型中设置参数“invalid_message”
例如:
public function reverseTransform($number)
{
if (!$number) {
return null;
}
$issue = $this->om
->getRepository('AcmeTaskBundle:Issue')
->findOneBy(array('number' => $number))
;
if (null === $issue) {
// Nothig action
//throw new TransformationFailedException(sprintf(
// 'An issue with number "%s" does not exist!',
// $number
//));
}
return $issue;
}
$builder
->add('you_field', 'text', array('invalid_message' => 'An issue number not found'))
->get('you_field')->addModelTransformer('....');
首先,谢谢。您的方法应该有效,并且至少可以为用户提供一些关于正在发生的事情的良好反馈。也许有一种“标准”的方法可以做到这一点,我会选择一种更好的方法(如果有)或接受您的答案。我找不到其他方法来自定义此消息,但只有symfony表单捕获此异常,而不是用于控制的事件。因此,作为解决方案,您可以使用POST_SUBMIT和control synchronized属性,但我还没有尝试过该异常仅用于调试,而不是公开,提供的答案是正确的。否则,应使用其中一个submit侦听器,并在适当的字段上使用带有适当消息的
$form->addError(new-FormError('my message'))
。这将导致根目录在良好映射和良好消息的情况下仍然无效。