【问题标题】:symfony float type error messagesymfony float 类型错误信息
【发布时间】:2015-07-13 09:43:54
【问题描述】:

我对 symfony 有点陌生。我对实体及其注释以及链接的特定错误消息有疑问。下面,你可以看到实体属性和具体的注解。

/**
 * @var float
 *
 * @ORM\Column(name="chest", type="float")
 *
 * @Assert\Type(type="float", message="The value {{ value }} is not a type {{ type }} valid.")
 *
 */
private $chest;

如果我在表单中将此字段添加为文本字段,我会收到在实体中指定的正确错误消息。(例如:值“222”不是浮点类型有效)

$builder->add('chest', 'text')

但如果我将此字段添加为数字字段,则会收到一般错误消息。 (例如:此值无效)

$builder->add('chest', 'number')

我看到,对于这种表单字段,有 invalid_message 属性,我可以在其中放置我的特定错误消息并且它可以工作,但我不喜欢根据字段类型分开设置错误消息的方式.

也许我完全错了,我对这些有点困惑。

非常感谢您的帮助

吉尔

【问题讨论】:

    标签: php symfony annotations


    【解决方案1】:

    此类型约束检查您的属性是否为 float 值。

    如果你使用文本类型,(并且如果你有一个基本的设置器)“胸”属性将是一个字符串。所以它在这个测试中总是会失败。

    如果您使用数字类型,表单会尝试将提交的文本值转换为数字。如果不可能,您将收到您在“invalid_message”选项(或默认值)中设置的消息。

    如果 "chest" 是严格的浮点数,我建议您在表单中使用数字类型。

    或者您可以将类型约束“type”选项设置为“numeric”。它接受数字格式的字符串值。见:http://php.net/manual/en/function.is-numeric.php

    希望对您有所帮助! :)

    更新

    如果我遇到这样的问题,我会将我的错误消息整理到验证器的语言文件中。

    在实体中:

    /**
     * @var float
     *
     * @ORM\Column(name="chest", type="float")
     *
     * @Assert\Type(type="float", message="chest.invalid")
     */
    private $chest;
    

    在表单类型中:

    $builder->add('chest', 'number', array(
        "invalid_message" => "chest.invalid",
        "invalid_message_parameters" => array(
            "{{ type }}" => "float"
        )
    ));
    

    在验证语言文件中:

    # app/Resources/translations/validators.en.yml
    
    chest.invalid: The value {{ value }} is not a type {{ type }} valid.
    

    (之后需要清除缓存)

    【讨论】:

    • 好的我明白为什么我使用文本类型时测试失败了。我担心的是根据使用的表单类型指定错误消息的方式不同。我只想在实体中指定错误消息。
    • “胸”一定是浮标吗?如果没有,请将胸部作为文本添加到表单中,并在“类型”选项中使用带有“数字”值的类型约束。在这种情况下,您只需在此处定义错误消息。
    • 不幸的是它必须是浮动的:(
    • FormType 中的错误。我有一个 TransformationFailedException: Unable to transform data for property path "southlatitude": Expected a numeric string。一旦更改为 $builder->add('southlatitude', NumberType::class, []) 它就可以工作。实体方法是类型提示的,值看起来像预期的那样
    【解决方案2】:

    这可能是因为数据和表单字段类型都有单独的Constraints。

    由于您已经对数据本身设置了约束,我认为删除表单类型的约束是安全的。

    你可能会做这样的事情(虽然,我从来没有尝试过):

    $builder->add('chest', 'number', array('constraints': null))
    

    这行得通吗?

    【讨论】:

    • No 它没有任何改变,我仍然收到一般错误消息,而不是在带有注释的实体中指定的错误消息。
    • 我查看了NumberType 类的来源,但找不到该消息的证据。嗯,我会再看一些,如果我想到别的,我会告诉你;)
    猜你喜欢
    • 1970-01-01
    • 2018-05-07
    • 2013-12-16
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    相关资源
    最近更新 更多