Создание формы Symfony 4 без базы данных

Я новичок в symfony и хочу создать простую контактную форму, взять отправленные значения и отправить их по электронной почте. Я не хочу ничего сохранять в базе данных.

Я следил за документацией на этой странице: 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?


person bandanh    schedule 31.01.2018    source источник
comment
Ваша IDE должна была предупредить вас о проблемах с пространством имен.   -  person Cerad    schedule 31.01.2018
comment
Я использую phpStorm с плагином Symfony. Но неправильное пространство имен допустимо, и ->add('name', TextType::class) просто принимает неправильный класс в качестве параметра, я не использую никаких методов TextType.   -  person bandanh    schedule 31.01.2018


Ответы (2)


Вероятно, вы импортировали неправильный тип. Вместо:

use Doctrine\DBAL\Types\TextType;

тебе нужно:

use Symfony\Component\Form\Extension\Core\Type\TextType;
person Yoshi    schedule 31.01.2018

'form' => $ form-> createView () вместо 'form' => $ form

person Anne-Marie Savary    schedule 11.03.2018