Skip to content
Advertisement

Creating a Symfony 4 Form without Database

I’m new to symfony and want to to create a simple contact form, take the submitted values and send them as an Email. I don’t want to save anything in the database.

I followed the documentation on this page: https://symfony.com/doc/current/form/without_class.html

I created a new page/action with the code from the page above:

    /**
     * @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
        ]);
    }

But this gives me an error:

SymfonyComponentFormExceptionInvalidArgumentException:
Could not load type "DoctrineDBALTypesTextType": class does not implement "SymfonyComponentFormFormTypeInterface".

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

What am I doing wrong? Why is there all the Doctrine stuff in the Stack Trace?

Advertisement

Answer

You probably imported the wrong type. Instead of:

use DoctrineDBALTypesTextType;

you need:

use SymfonyComponentFormExtensionCoreTypeTextType;
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement