如何在Symfony中自定义DataTransformer错误消息?

gre*_*emo 6 symfony-forms symfony symfony-2.1 symfony-2.3

我简单的数据转换器将数字转换为实体,反之亦然。就像官方文档中的示例一样。

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;
}
Run Code Online (Sandbox Code Playgroud)

但是,使用上述转换器的表单字段会收到一般错误消息“此值无效”。即使更改异常文本(我希望将其用作验证消息,但事实并非如此)也不会更改错误消息。

如何显示异常文本而不是“此值无效”?

Zhu*_*ukV 5

绝对不会,因为symfony会捕获此异常并设置自己的消息(字段不正确)。如果要自定义此消息,则必须将验证器设置为此字段。

也许我错了,但是什么也没找到。

例如:

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;
}
Run Code Online (Sandbox Code Playgroud)

并将NotBlank / NotNull验证器添加到字段。

UPD

您可以在表单类型中设置参数“ invalid_message”。

例如:

$builder
  ->add('you_field', 'text', array('invalid_message' => 'An issue number not found'))
  ->get('you_field')->addModelTransformer('....');
Run Code Online (Sandbox Code Playgroud)