在表单视图(或表单构建器)中获取实体断言属性以与JS一起使用

时间:2014-11-19 10:39:09

标签: symfony

我正在尝试从表单

访问实体类中定义的断言信息
class MyEntity {
  [...]
  /*
   * @Assert\Count(min="1", max="3")
   */
  protected $myfield;
  [...]
}

目的是自定义视图。 在这个例子中,我想显示一条消息,说“你必须在[min]和[max] items之间输入”

我在form_div_layout.html.twig中var_dumped了很多变量 我试图探索FormBuilder对象,但我还没有找到它。

你知道实现这个目标的方法吗?

PS:抱歉我的英语不好

马丁里奥斯回答后编辑:

目标不是提供错误消息。

最终目标是使用这些值来构建视图。

例如,如果你使用这个jQuery插件:sfPrototypeMan,你可以有一个“添加项目”链接和一个“删除项目”。

如果我想在我的集合达到其最大大小时禁用“添加项目”链接,我需要在我的JavaScript中操作约束属性

我尝试研究这个插件JsFormValidatorBundle,但不明白它是如何工作的......

1 个答案:

答案 0 :(得分:0)

为什么不像Validation in the cookbook

那样做

远比在实体内部更容易实现。与此同时,您的好处是不会将您的实体与Symfony结合使用。

# src/Acme/BlogBundle/Resources/config/validation.yml
Acme\BlogBundle\Entity\MyEntity:
    properties:
        myfield:
            - Count:
               min: 1
               max: 3
               minMessage: "You must specify at least one item"
               maxMessage: "You cannot specify more than {{ limit }} items"

确保您要验证的属性是集合(即实现Countable的数组或对象)

chakhâl版本后编辑: 你不需要过于复杂化,如果你想从某个地方访问它,只需将这些值保存在parameters.yml中并执行Custom form Validation AFAIK你不能在参数中使用参数中定义的变量,否则这将非常容易。

但我总是记住,形式是形式,观点是不同的东西。因此,如果您想保持简单,只需将此最小/最大值作为附加模板数组传递,并在parameters.yml中定义它。只有当你需要更深入,然后将它们注入自定义验证器并将它们放在一个地方(但这听起来像我个人认为有点过于复杂)