首页 > 解决方案 > Symfony 4 - 自定义表单错误消息

问题描述

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

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

->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;
    ));
}

我需要三样东西:-

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

请帮忙!:)

问候, Mzimhle

标签: phpsymfonysymfony4

解决方案


这可以帮助你:

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;
}

推荐阅读