【问题标题】:Symfony 2 Validator - how to return an arraySymfony 2 Validator - 如何返回一个数组
【发布时间】:2013-07-07 17:40:47
【问题描述】:

我需要 Symfony2 验证器来返回一个数组而不是一个对象。

所以是这样的:

$insert = new MyEntity();
$insert->setTest1( 'testtesttest' );
$validator = $this->get('validator');
$errors = $validator->validate($insert);

...将启用此功能:

$errors[0]['message'] = "The email is not valid"

只是一个简单的数组,因为解析返回的对象非常困难。

我了解验证器配置,但我只需要验证器返回一个数组而不是它通常的对象。

我正在对结果进行 JSON 编码,并且 (a) json_encode 难以处理对象 + (b) 我不想只返回整个对象的错误列表。

我没有使用内置表单,只使用原始验证器。

【问题讨论】:

    标签: php json validation symfony


    【解决方案1】:

    您可以遍历对象以创建错误数组。

    $errors = $this->get('validator')->validate( $insert );
    
    $errorArray = array();
    
    foreach($errors as $error)
    {
        $errorArray[$error->getPropertyPath()] = $error->getMessage();
    }
    

    【讨论】:

      【解决方案2】:

      Validator->validate()返回一个ConstraintViolationListInterface的对象,它实现了IteratorAggregate接口。对其进行简单的 foreach 并从 ConstraintViolationInterface 对象中构造所需的数组。

      【讨论】:

      • 你不能foreach它,因为它是一个只有私有属性的对象
      • 错误。你读过我的回答吗? validate() 返回一个可遍历的列表,您可以使用 foreach 对其进行迭代,并且 foreach 应该返回 ConstraintViolationInterface 的对象
      猜你喜欢
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 2017-03-11
      • 1970-01-01
      相关资源
      最近更新 更多