Symfony 2表单包括自定义消息中的无效数据

时间:2014-12-08 05:13:54

标签: forms symfony

我试图完成以下任务:

$builder->add('some_field', 'some_type', array(
    // ...
    'invalid_message'            => 'You entered an invalid value: %1%',
    'invalid_message_parameters' => array('%1%' => ?),
));

我的问题是,我无法弄清楚在哪里获得%1%的价值。

通过阅读文档并进行搜索,我就想到了这一点。有没有其他方法可以实现这个目标?

3 个答案:

答案 0 :(得分:0)

如果再次查看文档,您将看到您在此处复制的特定示例仅适用于某些formTypes(因为整数)不适用于您想要实现的目标。

阅读this first。那里有很多Constraint示例以及如何设置正确的错误消息。

从您的代码中,您无法猜测您想要做什么,因为没有任何Contraint定义输入值无效。 我建议在实体中进行验证,如果可以的话,那么你可以将它们保存在Resources / config / validation.yml中

然后你可以做类似的事情:

Acme\BlogBundle\Entity\Author:
properties:
    email:
        - Email:
            message: The email "{{ value }}" is not a valid email.

价值会打印出你想要的东西。如果您需要,可以定义custom Constraint

答案 1 :(得分:0)

如果您的表单基于实体,则应使用validation.yml文件来使用约束。如果没有(或者如果你是懒惰的话),你也可以使用php在表单中添加约束:

#Load the constraint you are going to use (for example length, which put min or max limits to your input length
use Symfony\Component\Validator\Constraints\Length;
# ...
#then in your controller or formtype where you build your form:
$form=$this->createFormBuilder()
        ->add('newPassword', 'password', array(
            'required' => true,
            'constraints' => array(
                new Length(array(
                    'min' => 8,
                    'minMessage' => 'You have entered {{ value }} which is under the limit length {{ limit }}')))))
        ->getForm();

在此示例中,我构建了一个必须高于限制(8)的密码输入。请注意我如何在此输入中实现length约束。然后使用{{ value }}打印消息以访问输入的值。您应该找到不同约束如何实现消息,在“长度约束”的情况下,您可以为其他约束设置'minMessage'和'maxMessage',您只能使用'消息'。

答案 2 :(得分:0)

如果您喜欢我正在搜索要在投掷TransformationFailedException时设置的验证消息,您只需使用由Symfony预先填充的{{ value }}

$builder->add('some_field', 'some_type', array(
    // ...
    'invalid_message' => 'You entered an invalid value: {{ value }}'
));