我在这里有一个 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 来呈现此表单)。