Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Can';t使用symfony处理表单_Php_Forms_Symfony - Fatal编程技术网

Php Can';t使用symfony处理表单

Php Can';t使用symfony处理表单,php,forms,symfony,Php,Forms,Symfony,我有一个控制器,它呈现一个表单,并呈现到每个页面 问题是,表单不关心提交事件 每个页面都扩展base.html.twig,其中 {{ render(controller('AppBundle:NewsLetter:formRender')) }} 这是控制器: <?php namespace AppBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Compo

我有一个控制器,它呈现一个表单,并呈现到每个页面

问题是,表单不关心提交事件

每个页面都扩展base.html.twig,其中

{{ render(controller('AppBundle:NewsLetter:formRender')) }}
这是控制器:

<?php

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

use AppBundle\Entity\Emails;

use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;

class NewsLetterController extends Controller
{

    public function formRenderAction(Request $request)
    {
        $email = new Emails();

        $form = $this->createFormBuilder($email)
            ->add('email', EmailType::class, array('label' => false, 'attr' => array('placeholder' => 'Your e-mail address')))
            ->add('save', SubmitType::class, array('label' => 'SUBMIT!'))
            ->getForm();

        $form->handleRequest($request);

        if ($form->isSubmitted()) {

            die(); //breakpoint

            $em = $this->getDoctrine()->getManager();
            $em->persist($email);
            $em->flush();

            $this->addFlash('success', 'Email was successfully saved.');
        }

      return $this->render('newsLetter.html.twig', array('form' => $form->createView()));
    }
}

当您添加表单时,未指定该表单将发布回呈现该表单的同一url的操作。因此,如果您有一个出现在多个页面上的表单,则每个控制器函数必须能够处理该表单

您可以创建具有该功能的基本控制器并扩展其他控制器。如果这样做,每个操作方法都必须调用此函数,并且您必须单独处理表单的提交,因为该页面上可能有多个表单。
例如
$emailAction=$form->get('addEmail')->isClicked(

或者,您可以将表单的操作设置为只处理该表单的专用路由,然后可能重定向回原始url(可能将其作为隐藏字段传递,由您选择)。
例如

<div class="newsletter">
  <p>Nechte si zasílat články e-mailem</p>
  {{ form_start(form) }}
    {{ form_widget(form) }}
    {{ form_end(form) }}
</div>
$form = $this->createForm(Foo::class, $task, array(
    'action' => $this->generateUrl('target_route'),
    'method' => 'POST',
));