Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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-验证从Vue发送的表单_Php_Symfony_Validation_Vue.js - Fatal编程技术网

Php Symfony 4-验证从Vue发送的表单

Php Symfony 4-验证从Vue发送的表单,php,symfony,validation,vue.js,Php,Symfony,Validation,Vue.js,如何验证(服务器端)从Vue创建和提交的表单 我有一个简单的联系人表单,我想在客户端和服务器端验证它。对于我正在使用的客户机模式(它可以正常工作),对于服务器端模式,我想使用Symfony的表单验证 因此,在本例中,表单不是使用Symfony的方法呈现的,本例中的表单仅用于验证。我已经创建了表单(它没有链接到实体对象),但是当我从Vue组件发送httppost请求时,服务器端的验证不起作用。似乎它没有“读取”在FormType类中创建的约束 我的功能: public function sendC

如何验证(服务器端)从Vue创建和提交的表单

我有一个简单的联系人表单,我想在客户端和服务器端验证它。对于我正在使用的客户机模式(它可以正常工作),对于服务器端模式,我想使用Symfony的表单验证

因此,在本例中,表单不是使用Symfony的方法呈现的,本例中的表单仅用于验证。我已经创建了表单(它没有链接到实体对象),但是当我从Vue组件发送http
post
请求时,服务器端的验证不起作用。似乎它没有“读取”在
FormType
类中创建的约束

我的功能

public function sendContactUsEmailAction(Request $request, Mailer $mailer, TranslatorInterface $translator)
{
    try {
        $form = $this->createForm(ContactUsType::class);

        $form->submit($request->request->all());

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            $data = $form->getData();

            $emailParams = new ContactUsParams();
            $emailParams->setName($data['name']);
            $emailParams->setEmail($data['email']);
            $emailParams->setSubject($data['subject']);
            $emailParams->setMessage($data['message']);

            $email = new ContactUsMail($mailer, $emailParams);
            $email->send();

            return new JsonResponse($translator->trans('send_contact_us_email_response'));
        }

        return new JsonResponse($this->getFirstFormError($form), 400);
    } catch (\Exception $e) {
        return new JsonResponse($e->getMessage(), 500);
    }
}
已编辑

这是我的请求数据的转储:

array:4 [
  "name" => "Example"
  "email" => "foo@example.com"
  "subject" => "Test subject"
  "message" => "Test message"
]

这是我的FormType类。为了测试它,我为name属性添加了约束“Email”,但是从请求中我没有发送有效的电子邮件

    class ContactUsType extends AbstractType
    {

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class, array(
                'constraints' => array(
                    new NotBlank(),
                    new Email(),
                ),
            ))
            ->add('email', EmailType::class, array(
                'constraints' => array(
                    new NotBlank(),
                    new Email(),
                ),
            ))
            ->add('subject', TextType::class, array(
                'constraints' => new NotBlank(),
            ))
            ->add('message', TextareaType::class, array(
                'constraints' => new NotBlank(),
            ));
    }

    /**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'csrf_protection' => false,
            'validation_groups' => false,
        ]);
    }
}

我找到了解决办法。问题是由选项“validation_groups”设置为false引起的。我删除了它,现在工作

“服务器端的验证不起作用”是什么意思?您是否收到验证错误?数据是空的吗?您发送的请求看起来如何?@dbrumann,并且没有收到任何验证ERORR,尽管我在FormType类中添加了其他约束以查看是否应用了这些约束。请求数据是正确的,我将添加它们above@dbrumann我还添加了ContactUsType类。您看,我为name属性添加了约束“Email”。但是从我的请求中,我没有发送一个有效的电子邮件地址。回复是什么样子的?如果您在dev环境中运行此请求,则响应应该有一个名为
X-Debug-Token-Link
的头,该头将引导您到探查器输出。在那里,您应该能够检查表单数据的其他信息。@dbrumann cool。但我不明白错误在哪里,这是屏幕:。该字段应为空,但我发送了一个包含某些内容的字段,为什么该值正确?