【问题标题】:Remove validator constraint for one single field删除单个字段的验证器约束
【发布时间】:2017-01-26 14:34:57
【问题描述】:

我目前正在浪费大量时间做一件简单的事情。

我想从 symfony 的特定字段中删除表单检查器/验证器。

将此事件监听器添加到构建器工作正常:

->addEventListener(
    FormEvents::POST_SUBMIT, 
    function (FormEvent $event) { 
        $event->stopPropagation(); 
    }, 
    900
)

但它禁用了所有字段的检查器,我只想要一个字段。

'required' => false'csrf_protection' => false 不要这样做

任何帮助谢谢。

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    约束可以来自多个方向。根据您的问题,我不确定您想要摆脱的约束来自哪里。

    • AppBundle/Resources/validation.[yml|xml|php] 查找您的实体名称,然后字段名称只需注释/删除或修改约束(如果找到)。

    • 如果你的类型中有一个约束,表单类型可以应用约束symfony doc,只需打开你的EntityType.php类并查找字段名称并检查是否有constraints的选项

    • required 类型内的选项和<input type="date"> 可以在客户端应用约束,因此请确保它不是您想要摆脱的那种约束,您说您删除了required,但可能是@987654327 @坚持。

    • 然后您可以在您正在使用的捆绑包的事件中应用约束 在源文件中搜索错误消息可以帮助您找到负责该隐藏约束的代码

    Symfony 约束应该在失败时返回人类可读的错误消息。

    附: required 不是约束,但可以看起来很像!

    【讨论】:

    • 首先,感谢您的回复。我有一个包含许多字段的表单,例如姓名简历等......还有一个名为标签的实体字段。用户可以使用 Javascript 直接在字段中添加标签,但 symfony 的验证器说该值不正确,因为用户选择它的字符串并不是真正的实体。我只希望验证器跳过对该特定字段的任何检查,例如 $event->stopPropagation();做。除了 stopPropagation 为所有字段执行此操作外,我只想知道如何将其应用于一个特定字段。我希望我很清楚,再次感谢您的回复
    • 你的问题来自转换器而不是约束你的表单应该使用这种类型collectionType into symfony book仔细查看allow_add,prototype and entry_typeentry_type在你的情况下非常重要,因为它会告诉symfony如何转换来自prototype 的数据,有事件你需要基于原型添加新元素的javascript ;) 好阅读先生 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2018-02-07
    相关资源
    最近更新 更多