【问题标题】:Symfony Form Error RenderingSymfony 表单错误渲染
【发布时间】:2015-05-16 07:08:20
【问题描述】:

我有以下问题。我使用 Symfony Forms 来验证 JSON 请求,这也很有效。但我也会以 Json 可读的方式抛出错误。

我是否可以从 FormErrorIterator FormError 中为每个错误获取相关字段名称。

例如:

formName.SubForm.Propertyname => 'MyErrorMessage'

路径的结构也可以是一个数组。

【问题讨论】:

    标签: php json symfony error-handling


    【解决方案1】:

    如果您想在数组中检索表单的错误,您可以在控制器中添加并使用此方法:

    private function getErrorMessages(\Symfony\Component\Form\Form $form) {
        $errors = array();
    
        foreach ($form->getErrors() as $key => $error) {
            if ($form->isRoot()) {
                $errors['#'][] = $error->getMessage();
            } else {
                $errors[] = $error->getMessage();
            }
        }
    
        foreach ($form->all() as $child) {
            if (!$child->isValid()) {
                $errors[$child->getName()] = $this->getErrorMessages($child);
            }
        }
    
        return $errors;
    }
    

    $errors 将包含一个错误数组,如果某个字段有错误,则字段名称将用作数组中的键:

    $errors['FIELD_NAME'] = ERROR_MSG。

    根据您的 Symfony 版本,您可能需要或想要此方法的其他版本:Symfony2 : How to get form validation errors after binding the request to the form

    更新

    如果您的validation constraints 位于 Entity 类的字段中,则它们将位于错误数组中,并带有基于字段名称的键。

    如果您的验证约束在 Entity 类上,则将在 # 键或数字键中,具体取决于表单是否为根。

    实体类示例

    /**
     * @Assert\Callback("isValidName") <- this error will be in $errors['#']
     */
    class Author
    {
        /**
         * @Assert\NotBlank() <- this error will be in $errors['firstname']
         */
        public $firstname;
    }
    

    如果您只想在字段上出现错误,则需要将所有 Entity 类断言移到 Entity 字段上。

    【讨论】:

    • 这似乎更像是一个评论。如果您想从参考链接中提取更具体(和有用)的答案以在此处报告,您需要向提出问题的人索取更多信息。
    • 我已经更新了我对您评论的回答,应该更准确。
    • 在您的答案中,您是根据“#”内的错误编写的。如何将其中一个错误绑定到表单字段?
    猜你喜欢
    • 1970-01-01
    • 2014-05-25
    • 2015-08-04
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多