【问题标题】:Symfony validation get specific error by propertySymfony 验证通过属性获取特定错误
【发布时间】:2016-10-20 09:00:52
【问题描述】:

我知道如何验证以及如何检索错误消息。 但是如何按属性获取特定的错误条目?

不是这样的:

{% for error in errors %}
    <li>{{ error.message }}</li>
{% endfor %}

我的意思是这样的:

getError($errors, 'myProperty');

这样的事情可能吗?

我使用验证器,但不使用表单类。我有 \Symfony\Component\Validator\ConstraintViolationListInterfac‌​e - 与 所有错误消息的数组。

很遗憾,我不在 Twig 上下文中......我需要它来聪明点......我想直接显示特定字段的错误消息,如下所示:

    <label for="city">{getError($errors, 'myProperty')}</label> 
    <div class="form-group"> 
      <input class="form-control" name="city" id="city" placeholder="City *" type="text">
    </div>

【问题讨论】:

  • 我认为这是Form 组件相关的,对吧? :)
  • 不,很遗憾没有... :-/
  • 好吧,所以errors 变量来源于Validator?
  • 是的,我使用验证器,但不使用表单类。我得到了 \Symfony\Component\Validator\ConstraintViolationListInterface - 包含所有错误消息的数组。

标签: php validation symfony


【解决方案1】:

试试这个代码是否适合你:

{% for error in errors %}
   {% if error.propertyPath == 'myProperty'  %}
      <li>{{ error.message }}</li>
   {% endif %}
{% endfor %}

您可以创建一个TWIG macro 来接受错误和处理渲染的字段。

告诉我

【讨论】:

  • 遗憾的是,我不在 Twig 上下文中......我需要它来做 smarty .. 我想直接显示特定字段的错误消息,如下所示:
  • 嗨@goldlife我不知道聪明,但我认为你可以找到一个系统来将逻辑封装到一个函数或可重用的东西中,显然:如果我的代码适合你:)
【解决方案2】:

基于Validator的想法:

因此,如果您有权访问您的 Validator 课程,您可能能够执行以下操作:

$validator->atPath('myField')->getViolations();

这将返回ConstraintViolationListInterfac‌e,但由于atPath 调用,它应该只返回违规的子集。

必须说,我自己从未尝试过,但听起来确实可行。

基于Form的解决方案,对你不是很有用

Form 类有方法getErrors() 方法:

 public function getErrors($deep = false, $flatten = true)

在您的示例中,您可以调用:

 form.myField.getErrors()

或者通过变量:

 {% set varWithFormName = "myField" %}

 form[varWithFormName].getErrors()

希望这会有所帮助...

【讨论】:

  • 嗯,好的,谢谢。问题在这里 - 我不在表单类中 - 是否有另一种方法可以在没有表单类的情况下检索特定字段的错误消息?
  • 既然你说不使用Form组件,这对你没用:)
  • 是的......我认为这可以工作。但不适用于我的具体情况。
  • 添加了基于Validator 的解决方案,但首先查看@Matteo 的解决方案。考虑到您通常会出现少量错误,这看起来很有趣...
猜你喜欢
  • 1970-01-01
  • 2018-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 2011-02-11
  • 1970-01-01
相关资源
最近更新 更多