Этот Symfony вопрос формы задавали 100 раз (и я прочитал ВСЕ ответы), но ни один из них не работает для меня. У меня есть класс (работодатель), форма (Preview. html .twig) и контроллер (DefaultController. php). Что бы я ни пробовал, я все равно получаю нулевые значения для полей формы. Форма отображается правильно, и я не сохраняю в базе данных (я просто хочу сбросить переменные, а затем перейду к действию db). На это ушло несколько недель моей жизни, и я искренне благодарен за любую помощь.
Контроллер по умолчанию (DefaultController. php)
<?
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\Employer;
use App\Form\EmployerType;
class DefaultController extends AbstractController
{ /**
* @Route("/preview", name="preview")
*/
public function preview(Request $request)
{
$employer = new Employer();
$form = $this->createForm(EmployerType::class, $employer, ['csrf_protection' => false]);
$form->handleRequest($request);
//the next two lines were added to force the form to submit, which it wasn't doing prior to
if ($request->isMethod('POST')) {
$form->submit($request->request->get($form->getName()));
if ($form->isSubmitted() && $form->isValid()) {
$employer = $form->getData();
dump($form); /****** ALL ENTRIES FROM THIS DUMP ARE NULL. *****/
exit; /***Added to capture dump ******/
return $this->redirectToRoute('homepage'); /** Works when the exit is removed ***/
}
}
return $this->render('preview.html.twig',
['form'=> $form->createView()]
);
}}
Класс работодателя (Employer. php)
namespace App\Entity;
class Employer
{
protected $companyName;
protected $companyAddress;
public function setCompanyName($companyName)
{ $this->companyName = trim($companyName); }
public function getCompanyName()
{ return $this->companyName; }
public function setCompanyAddress($companyAddress)
{ $this->companyAddress = trim($companyAddress); }
public function getCompanyAddress()
{ return $this->companyAddress; }
}
Конструктор форм (EmployerType. php)
<?php
namespace App\Form;
use App\Entity\Employer;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class EmployerType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('companyName', TextType::class, ['label' => 'Company Name', 'required' => false])
->add('companyAddress', TextType::class, ['label' => 'Address', 'required' => false])
->add('submit',SubmitType::class, ['label' => 'Submit & Preview'])
->getForm() //I've added and removed this line multiple times. Not sure if its needed.
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => Employer::class,
]);
}
}
Для отображения (Preview. html .twig) ** Отображает форму правильно **
{{ form(form) }}
Несколько кроличьих нор:
- Сайт работает на локальном хосте (Symfony, Apache, MySQL).
- Ввод формы отправляется через POST .
- Контроллер по умолчанию выполняет перенаправление после отправки; "exit" был добавлен, чтобы приостановить мой код.
- Форма не встроена. Я уменьшил масштаб всего проекта, потому что думал, что проблема была во встроенной форме.
- Я изменил метод на PUT и вижу значения формы, добавленные к URL-адресу, но $ работодатель = $ form-> getData () по-прежнему заполняет $ работодателя нулевыми значениями.
- Я пытался получить отдельные поля формы при отправке с помощью $ form-> get ('companyName') -> getData (); Данные остаются пустыми.
У меня нет идей, как сохранить данные формы в объекте Employer.