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

标签 symfony symfony-2.1 symfony-forms symfony-2.3

我的简单数据转换器将数字转换为实体,反之亦然。这很像 official documentation 中的例子.
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 捕获了这个异常并设置了自己的消息(字段不正确)。
如果您想自定义此消息,则必须将验证器设置为该字段。

也许我错了,但没有发现任何东西。

例如:

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;
}

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

UPD

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

例如:
$builder
  ->add('you_field', 'text', array('invalid_message' => 'An issue number not found'))
  ->get('you_field')->addModelTransformer('....');

关于symfony - 如何在 Symfony 中自定义 DataTransformer 错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19754436/

相关文章:

php - 在 Symfony 序列化中更改序列化属性名称

php - 注入(inject)依赖项 - Doctrine : Multiple repositories vs single entity manager

symfony - Doctrine2迁移-单表继承-父id不存在

php - Symfony 2.1 功能测试中的身份验证

symfony - Payum bundle : How to change the view of capture action in symfony2

symfony - 学说2 通过两列或条件查找

javascript - Symfony2 收集字段,用于发送电子邮件的简单列表

symfony - 将表单工厂注入(inject)服务

Symfony 4 - 控制台异常事件监听器

php - 注册表单不会触发验证约束