Как я могу очистить значения формы после успешной подачи формы
Как я могу очистить значения формы после успешной отправки формы?
Это не помогло:
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;
}
}
Ответы
Ответ 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) }}