【问题标题】:How to customize DataTransformer error message in Symfony?如何在 Symfony 中自定义 DataTransformer 错误消息?
【发布时间】:2013-11-03 15:13:21
【问题描述】:

我的简单数据转换器将数字转换为实体,反之亦然。很像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 symfony-2.1 symfony-forms symfony-2.3


    【解决方案1】:

    绝不可能,因为 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 表单捕获此异常,而不是控制事件。 github.com/symfony/Form/blob/master/Form.php#L612 所以,作为解决方案,您可以使用 POST_SUBMIT 并控制同步属性,但我没有尝试过
    • 异常仅用于调试,不暴露,提供的答案是要走的路。否则,应该使用其中一个提交侦听器并在具有正确消息的正确字段上使用$form->addError(new FormError('my message'))。无论如何,良好的映射和良好的消息都会导致根无效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 2020-12-04
    • 2021-03-11
    • 2020-12-05
    相关资源
    最近更新 更多