繁体   English   中英

Symfony 4 - 自定义表单错误消息

[英]Symfony 4 - Customizing form error messages

我的网站上有一个简单的表格。 提交和数据库入口工作完美,但问题是错误信息显示,我想使用两种方式,不确定它们是否也可以一起工作。

我想显示在表单类文件中声明的错误消息:

->add('firstname', TextType::class, array(
'required'  => true,
'label'     => 'Name(s)',
'attr'      => array(
    'class'  => 'form-control',
    'data-required-message' => 'Please enter patient name!'
),
'constraints' => array(
    new Constraints\NotBlank()
)))

和/或

我想显示在实体类文件中声明的错误:

 /**
 * @var string
 * @ORM\Column(type="string",name="first_name", length=50)
 * @Assert\NotBlank
 */ 
protected $firstName;

目前我没有上述两种情况,但我想要做的是通过控制器通过以下方式获取错误:

/**
* @Route("/patient/add", name="patient_add")
*/      
public function add(Request $request)
{
    $formOptions = array(
        'FacilityRepositoryObject'  => $this->getDoctrine()->getRepository(Facility::class),
        'SFGuardUserObject'         => $this->getDoctrine()->getRepository(SFGuardUser::class)
    );
    $errors = array();
    $patientAddForm = $this->createForm(PatientForm::class, null, $formOptions);

    $patientAddForm->handleRequest($request);

    if($patientAddForm->isSubmitted()) {
        $formData = $patientAddForm->getData();

        if($patientAddForm->isValid()) {
            $this->addPatient($formData);
        } else {
            $errors = $patientAddForm->getErrors();
        }
    }

    return $this->render('patient/add.html.twig', array(
        'addForm'   => $patientAddForm->createView(),
        'errors'        => $errors;
    ));
}

我需要三样东西:-

  • 能够显示实体类文件中定义的错误消息。
  • 能够显示在表单类文件中定义的错误消息。
  • 通过控制器获取错误消息并将它们显示在 twig 模板文件中。

我读到的另一种方式是在序列化“$patientAddForm->getErrors()”方法并让输出显示在树枝文件中时使用规范化器,但这只返回一个空数组,我还在某处阅读了这需要一个标准化器/序列化器来从中获取错误。

请帮忙! :)

问候, Mzimhle

这可以帮助您:

private function getErrorsFromForm(FormInterface $form)
{
    $errors = array();
    foreach ($form->getErrors() as $error) {
        $errors[] = $error->getMessage();
    }
    foreach ($form->all() as $childForm) {
        if ($childForm instanceof FormInterface) {
            if ($childErrors = $this->getErrorsFromForm($childForm)) {
                $errors[$childForm->getName()] = $childErrors;
            }
        }
    }
    return $errors;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM