如何在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'))
。这将导致根目录在良好映射和良好消息的情况下仍然无效。