【问题标题】:Symfony 3: How to valid an array of object?Symfony 3:如何验证对象数组?
【发布时间】:2019-03-20 16:47:13
【问题描述】:

我有以下实体:

class Jobs {
//...

  /**
   * Tasks of Jobs
   * @var $tasks array
   */
   protected $tasks;

}

tasks在 Json 文件中存储为数组,如下所示:

[
  {
    "designation": "Task 1",
    "action": "Do action 1",
    //...
  },
  {
    "designation": "Task 2",
    "action": "Do action 2",
    //...
  },
  //...
]

当用户从表单定义数据时,我想实现一个断言进行验证。

我已经实现了这个(我使用 yml):

...\Entity\Jobs:
  properties:
    tasks:
      - Collection:
        allowMissingFields: false
        missingFieldsMessage: jobs.tasks.missingfields
        fields:
          designation:
            - NotBlank:
              message: jobs.tasks.fields.blank
            ##...

当我尝试验证表单时,data.tasks[designation]data.tasks[action] 出现验证错误。

验证应应用于数组的第二级。
如何为这种数组配置验证器?

【问题讨论】:

    标签: symfony validation


    【解决方案1】:

    @Collection()-assertion 在数组键相关时使用,就像每个数组代表一个任务一样。如果您只关心其中的值,例如一个数值数组,你可以使用@All()-constraint。

    在您的情况下,您希望将任务列表 (@All) 和该列表中的每个任务 (@Collection) 结合起来。作为注释,它可能看起来像这样:

    class Jobs
    {
        /**
         * @Assert\All({
         *      @Collection(...)
         * })
         */
        private $tasks;
    }
    

    见:https://symfony.com/doc/current/reference/constraints/All.html

    【讨论】:

    • 感谢您的回答。就是这样。
    • 表单中的类型应该是什么?没有什么?我的意思是我们在控制器中创建表单,我们有一个 Jobs 类的表单,我们有 $builder->add... 它有我们需要设置的第二个参数,因为这对我不起作用.
    • 我认为您将表单元素与验证约束混为一谈。假设您的工作是学说实体,那么您很可能需要EntityType
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-13
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2015-10-24
    相关资源
    最近更新 更多