Symfony,在表单中预先提示/显示验证约束消息

Posted

技术标签:

【中文标题】Symfony,在表单中预先提示/显示验证约束消息【英文标题】:Symfony, preemptively hint/display validation constraint message in a form 【发布时间】:2020-09-23 17:26:25 【问题描述】:

当我有一个表单和一些约束规则时,比如max valueLessThanOrEqual,我如何显示这个规则条件以便用户知道输入接受什么数据格式?

我想显示在验证失败后(表单提交后)出现的相同消息始终可见,在各自<input>附近的某个地方@

更多信息

我在各自的buildForm 中有这个,你可以看到LessThanOrEqual 有动态的可能值。所以最好总是让用户知道可以输入的最大值。

    $builder
        ->add('amount', null, [
            'constraints' => [
                new LessThanOrEqual($maxValue)
            ]
        ])

我知道我可以使用 help 属性,但是再次定义翻译文本会有点多余,因为所有的验证规则都已经设置好了。因此,最好只显示相同的消息,该消息将在提交验证失败的表单后出现。所以在我的例子中:

此值应小于或等于 compatible_value

谢谢

编辑: 这将通过实时 javascript 验证部分解决,该验证将实时验证并通知用户,只需使用一些 javascript (jQuery,...) 插件。

但是,在输入旁边显示一条简单的文本消息(通知验证规则)也很好 - 此 javascript 解决方案无法解决。

编辑 2: 在我的 twig 视图中只是基本的,没什么特别的:

 form_start(form) 
     form_widget(form) 
    <button class="btn btn-success"> button_label|default('Save'|trans) </button>
 form_end(form) 

【问题讨论】:

帮助存在,你应该使用它。 您可以读取约束上 message 属性的值,但如果您只是将其分配为 help 文本我不认为,您将不会被插值自己做。 您可以编辑您的问题并添加查看页面的代码吗? (你有form_start ...form_end的代码) 我编辑了帖子并从树枝视图添加了代码。 【参考方案1】:

从 symfony 4.3 开始,您可以使用 'help_translation_parameters',所以应该可以。

    $constraint = new LessThanOrEqual(7); // create constraint
    $builder
        ->add('amount', null, [
            'constraints' => [
                $constraint
            ],
            'help' => $constraint->message,
            'help_translation_parameters' => [' compared_value ' => $constraint->value]
        ])
    ;

【讨论】:

我试过了,而且成功了。惊人的。但是,问题在于翻译。我在 validators.csxlf 中有验证消息,但数量在不同的翻译文件中翻译。我只知道translation_domain 属性,不幸的是这两个属性都有影响。我可以翻译一个翻译域并帮助不同域吗? 您可以在构造函数中自动装配 TranslatorInterface 并将其用于翻译帮助属性。 'help' => $this->translator->trans($constraint->message, [' compatible_value ' => $constraint->value], 'validators') 我试过了,没有问题。再次。谢谢@fbuchlak

以上是关于Symfony,在表单中预先提示/显示验证约束消息的主要内容,如果未能解决你的问题,请参考以下文章

如何正确验证表单中带有 symfony json 约束的学说类型“json”?

Symfony 3.4 和模态表单验证

Symfony 5.3 - FormBuilder RepeatedType - 当密码不同时,错误消息不会显示在表单中

Symfony 验证:错误消息未显示在关联字段中

表单类型类中的类约束验证器?

Symfony2 - 验证不适用于嵌入式表单类型