不使用数据库创建Symfony 4表单

3
我是新手,想要创建一个简单的联系表单,并将提交的值作为电子邮件发送。我不想在数据库中保存任何东西。我按照这个页面上的文档进行操作:https://symfony.com/doc/current/form/without_class.html。我使用了该页面上的代码来创建一个新页/操作:
    /**
     * @Route("/contact", name="page_contact")
     */
    public function contact(Request $request)
    {
        $defaultData = ['message' => 'Type your message here'];
        $form = $this->createFormBuilder($defaultData)
            ->add('name', TextType::class)
            ->add('email', EmailType::class)
            ->add('message', TextareaType::class)
            ->add('send', SubmitType::class)
            ->getForm();

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {
            // data is an array with "name", "email", and "message" keys
            $data = $form->getData();
        }

        return $this->render('Shop/contact.html.twig', [
            'form' => $form
        ]);
    }

但是这会给我一个错误:
Symfony\Component\Form\Exception\InvalidArgumentException:
Could not load type "Doctrine\DBAL\Types\TextType": class does not implement "Symfony\Component\Form\FormTypeInterface".

  at vendor/symfony/form/FormRegistry.php:89
  at Symfony\Component\Form\FormRegistry->getType('Doctrine\\DBAL\\Types\\TextType')
     (vendor/symfony/form/FormFactory.php:74)
  at Symfony\Component\Form\FormFactory->createNamedBuilder('name', 'Doctrine\\DBAL\\Types\\TextType', null, array())
     (vendor/symfony/form/FormBuilder.php:97)
  at Symfony\Component\Form\FormBuilder->create('name', 'Doctrine\\DBAL\\Types\\TextType', array())
     (vendor/symfony/form/FormBuilder.php:256)
  at Symfony\Component\Form\FormBuilder->resolveChildren()
     (vendor/symfony/form/FormBuilder.php:206)
  at Symfony\Component\Form\FormBuilder->getForm()
     (src/Controller/ShopController.php:68)
  at App\Controller\ShopController->contact(object(Request))
     (vendor/symfony/http-kernel/HttpKernel.php:149)
  at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1)
     (vendor/symfony/http-kernel/HttpKernel.php:66)
  at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true)
     (vendor/symfony/http-kernel/Kernel.php:190)
  at Symfony\Component\HttpKernel\Kernel->handle(object(Request))
     (public/index.php:37)

我做错了什么?为什么堆栈跟踪中有那么多Doctrine的东西?


你的IDE应该已经警告了你关于命名空间问题。 - Cerad
我正在使用带有Symfony插件的phpStorm。但是错误的命名空间是有效的,并且 ->add('name',TextType :: class) 只需将错误的类作为参数,我不使用任何 TextType 的方法。 - bandanh
2个回答

15

你可能导入了错误的类型。应该使用:

use Doctrine\DBAL\Types\TextType;

你需要:

use Symfony\Component\Form\Extension\Core\Type\TextType;

1
"'form' => $form->createView()替换为'form' => $form"。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接