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

标签 php symfony validation vue.js

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

我有一个简单的联系表单,我想在客户端和服务器端验证它。对于客户端模式,我使用 vee-validate (并且有效),对于服务器端模式我想使用 Symfony 的表单验证

所以在这种“特殊”情况下,表单不是使用 Symfony 的方法呈现的,这种情况下的表单仅用于验证。我已经创建了表单(它没有链接到实体对象),但是当我发送 http post 时来 self 的 Vue 组件的请求,服务器端的验证不起作用。似乎没有“读取”在 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"
]

enter image description here

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

    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 引起的。我将其删除,现在可以使用了!

关于php - Symfony 4 - 验证从 Vue 发送的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51916159/

相关文章:

php - 我可以使用什么正则表达式来验证 0 到 255 之间的数字?

php - 设置 symfony 2 表单字段的名称属性

symfony - 多个实体的电子邮件日志表

ruby-on-rails - 验证模型中的日期时间条目

java - Spring mvc 中的数据未与绑定(bind)结果绑定(bind)

php - SimpleSAMLPHP:因为它不是此 SP 的有效 IdP

php - codeigniter使用外部变量插入到mysql

javascript - 使用下拉标签来验证其他下拉值

php - 使用MySQL计数函数

symfony - 表单事件监听器(如 TrimListener)如何将 "bound"映射到 Symfony 中的表单选项?