Подтвердить что ты не робот

Как я могу очистить значения формы после успешной подачи формы

Как я могу очистить значения формы после успешной отправки формы?

Это не помогло:

CONTROLLER:

namespace Car\BrandBundle\Controller;

use Car\BrandBundle\Entity\BrandEntity;
use Car\BrandBundle\Form\Type\BrandType;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

class BrandController extends Controller
{
    public function indexAction()
    {
        $form = $this->getFrom();

        return $this->render('CarBrandBundle:Default:brand.html.twig',
                array('page' => 'Brand', 'form' => $form->createView(), 'brands' => $this->getBrands()));
    }

    public function createAction(Request $request)
    {
        if ($request->getMethod() != 'POST')
        {
            return new Response('Only POST method is allowed');
        }

        $form = $this->getFrom();

        $form->handleRequest($request);

        if ($form->isValid())
        {
            $submission = $form->getData();

            $em = $this->getDoctrine()->getManager();

            $brand = new BrandEntity();
            $brand->setName($submission->getName());

            $em->persist($brand);
            $em->flush();

            $this->redirect($this->generateUrl('brand'));
        }

        return $this->render('CarBrandBundle:Default:brand.html.twig',
                array('page' => 'Brand', 'form' => $form->createView(), 'brands' => $this->getBrands()));
    }

    private function getFrom()
    {
        return $this->createForm(new BrandType(), new BrandEntity(),
                array('action' => $this->generateUrl('brandCreate')));
    }

    private function getBrands()
    {
        $repo = $this->getDoctrine()->getRepository('CarBrandBundle:BrandEntity');
        $brands = $repo->findAll();

        return $brands;
    }
} 
4b9b3361

Ответ 1

Вам просто нужно отключить объекты формы и объекта. Затем создайте новые, чистые экземпляры, чтобы они были доступны в вашем шаблоне. Лично я предпочитаю делать это только тогда, когда форма правильно проверена.

if($form->isValid()){

  // persisting and flushing the entity

  unset($entity);
  unset($form);
  $entity = new Entity();
  $form = $this->createForm(new EntityType(), $entity);
}

Работает для меня. Приветствия.

Ответ 2

Сброс формы symfony, когда та же страница обрабатывает представление

В методе Bazyl, создающем другую форму после снятия текущей формы, может оказаться ненужной задачей. Я предлагаю перенаправить на ту же страницу, потому что документация symfony (handling-form-submissions) также показывает пример, который перенаправляется на другой контроллер.

    if ($form->isSubmitted() && $form->isValid()) {
        // ... perform some action, such as saving the task to the database
        return $this->redirect($request->getUri());
    }

Я добавил примеры источников в GitHub

Ответ 3

Не уверен, что это связано, но когда ваша форма действительна, вы делаете $this->redirect($this->generateUrl('brand'));. Проблема $this->redirect() просто создает ответ перенаправления, который ваш контроллер должен возвращаться, чтобы принимать во внимание. Другими словами, просто $this->redirect() в середине контроллера ничего не делает (за исключением интронизации RedirectResponse, который будет мусором, собранным PHP).

Ответ 4

Если вы используете шаблоны ветки, вы можете просто очистить их там. Пример:

{{ form_start(form) }}
    {{ form_widget(form.yourFieldNameHere, { 'value': '' }) }}
{{ form_end(form) }}