Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 4:验证程序正在刷新,而不是显示消息_Php_Symfony_Constraints_Symfony Forms_Symfony 4.3 - Fatal编程技术网

Php Symfony 4:验证程序正在刷新,而不是显示消息

Php Symfony 4:验证程序正在刷新,而不是显示消息,php,symfony,constraints,symfony-forms,symfony-4.3,Php,Symfony,Constraints,Symfony Forms,Symfony 4.3,我有一个,在“客户机”部分有两种可能性(要么客户机已经存在,并且是从db中选择的,要么它不存在,并且您必须完成作为CollectionFormType导入的操作)。创建新客户机时,他的电话号码必须是唯一的,因此我尝试添加一个自定义约束“checkUnique”,用于检查重复项和格式 问题是,当满足newClient字段(电话)的约束条件时,页面正在刷新,而不是显示类似的消息。如何在不刷新的情况下阻止页面提交并显示更改电话号码的消息 我使用的CollectionFormType“NewClien

我有一个,在“客户机”部分有两种可能性(要么客户机已经存在,并且是从db中选择的,要么它不存在,并且您必须完成作为CollectionFormType导入的操作)。创建新客户机时,他的电话号码必须是唯一的,因此我尝试添加一个自定义约束“checkUnique”,用于检查重复项和格式

问题是,当满足newClient字段(电话)的约束条件时,页面正在刷新,而不是显示类似的消息。如何在不刷新的情况下阻止页面提交并显示更改电话号码的消息


我使用的CollectionFormType“NewClientType”:


包含CollectionFormType“NewClientType”的FormType:


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

这是客户端验证,因此您必须使用一些javascript进行验证。@msg但由于存在漏洞,我无法使用js。您有什么建议吗?您可以使用浏览器内置的格式验证,但要检查手机是否已经存在,您需要通过表单提交或ajax往返到服务器。@msg所以在“pre_submit”中无法停止表单提交?是的,使用javascript或html5验证(
模式
),但这只会让您走到目前为止……如果您想自定义错误消息或执行更高级的操作,您必须使用javascript。这是客户端验证,因此您必须使用一些javascript进行验证。@msg但由于存在漏洞,js对我来说不合适。您有什么建议吗?您可以使用for格式验证,内置于浏览器中,但要检查手机是否已经存在,您需要通过表单提交或ajax往返到服务器。@msg所以在“pre_submit”中无法停止表单提交?是的,使用javascript或html5验证(
模式
),但这只会让您走到这一步……如果您想自定义错误消息或执行更高级的操作,您必须使用javascript。
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();
    }
}
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,
    ]);
}