1

我在这里有一个 symfony 添加表单,在“客户端”部分有 2 种可能性(客户端已经存在,并且它是从 db 中选择的,或者它不存在并且您必须完成作为 CollectionFormType 导入的其他字段)。当您创建一个新客户时,他的电话号码必须是唯一的,所以我尝试添加一个自定义约束“checkUnique”来检查重复项和格式。

问题是,当满足来自 newClient 字段(电话)的约束条件时,页面正在刷新获取违规“电话已存在” 而不是显示这样的消息。如何在不刷新的情况下阻止页面提交并显示更改电话号码的消息?


我使用的 CollectionFormType“NewClientType”:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    etc just important
    $builder
        ->add('phone', TextType::class, array(
            'required' => true,
            'label' => $this->translator->trans('Telefon'),
            'constraints'=>[
                new NotBlank(['message' => $this->translator->trans('Câmpul este obligatoriu')]),
                new Callback(array($this, 'checkUnique'))
            ],
            'attr' => array(
                'placeholder' => $this->translator->trans('Telefon')
            )
        ));

}

public function checkUnique($value, ExecutionContextInterface $context) {
    $form = $context->getRoot();
    $data = $form->getData();
    $phone = str_replace("+","00",$context->getValue());
    if (!ctype_digit($phone)) {
        $context->buildViolation($this->translator->trans("Format invalid"))
            ->addViolation();
    } else if ($this->entityManager->getRepository(Clients::class)->findOneBy(["phone" => $phone])) {
        $context->buildViolation($this->translator->trans("Telefonul exista deja"))
            ->addViolation();
    }
}

包含 CollectionFormType "NewClientType" 的 FormType:

public function buildForm(FormBuilderInterface $builder, array $options) {

    etc just important
    $form->add('newClient', CollectionType::class, [
        'entry_type' => ClientsNewType::class,
        'allow_add'    => true,
        'allow_delete' => true,
    ]);
}

(我正在使用 Prototype 来呈现此表单)。

4

0 回答 0