Php Symfony显示在渲染控制器上创建的表单的表单错误

Php Symfony显示在渲染控制器上创建的表单的表单错误,php,forms,symfony,twig,Php,Forms,Symfony,Twig,我正在渲染控制器EmailControoler /** * @Route("/email", name="email") */ function insertEmailAction(Request $request) { $request = $this->get('request_stack')->getMasterRequest(); $email = new Email(); $form = $this->createForm(SendE

我正在渲染控制器EmailControoler

 /**
 * @Route("/email", name="email")
 */
function insertEmailAction(Request $request)
{
    $request = $this->get('request_stack')->getMasterRequest();

    $email = new Email();

    $form = $this->createForm(SendEmailType::class, $email);

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid())
    {
        $em = $this->getDoctrine()->getManager();
        $em->persist($email);
        $em->flush();

        $referer = $request->headers->get('referer');
        return $this->redirect($referer);

    }
     return $this->render('PTBEmailBundle:Default:index.html.twig', array(
        'form' => $form->CreateView(),
    ));

}
内枝模板

{{ render(controller('PTBEmailBundle:Email:insertEmail', {'request':app.request})) }}
结束所有链接都正常,表单显示数据并将其插入数据库。 但如果表单无效,用户将被重定向到路由/电子邮件,我应该如何在渲染视图上显示表单错误?谢谢:D

这是我的电子邮件实体:

    <?php

namespace DEERCMS\EmailBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Validator\Constraints as Assert;
/**
 * Email
 *
 * @ORM\Table(name="email")
 * @ORM\Entity(repositoryClass="DEERCMS\EmailBundle\Repository\EmailRepository")
 */
class Email
{
    /**
     * @var int
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     * @Assert\Email(message="This is not valid e-mail")
     * @ORM\Column(name="email", type="string", length=255, unique=true)
     */
    private $email;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="addDate", type="datetime")
     */
    private $addDate;


    public function __construct() {
        $this->addDate = new \DateTime;
    }
    /**
     * Get id
     *
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set email
     *
     * @param string $email
     *
     * @return Email
     */
    public function setEmail($email)
    {
        $this->email = $email;

        return $this;
    }

    /**
     * Get email
     *
     * @return string
     */
    public function getEmail()
    {
        return $this->email;
    }

    /**
     * Set addDate
     *
     * @param \DateTime $addDate
     *
     * @return Email
     */
    public function setAddDate($addDate)
    {
        $this->addDate = $addDate;

        return $this;
    }

    /**
     * Get addDate
     *
     * @return \DateTime
     */
    public function getAddDate()
    {
        return $this->addDate;
    }
}
如上所述,您需要做的就是在操作方法中检查您在实体类中设置的验证规则

比如:

$email = new Email();
// ...
$validator = $this->get('validator');
$errors = $validator->validate($email);
然后,如果存在验证错误,只需将其发送到所需的细枝模板:

if (count($errors) > 0) {
    return $this->render('default/whatever.html.twig', array(
        'errors' => $errors,
    ));
}
最后,要显示错误,请执行以下操作:

{# app/Resources/views/default/whatever.html.twig #}
<h3>The email has the following errors</h3>
<ul>
    {% for error in errors %}
        <li>{{ error.message }}</li>
    {% endfor %}
</ul>
{{#app/Resources/views/default/whatever.html.twig}
该电子邮件有以下错误
    {错误%中的错误为%0}
  • {{error.message}}
  • {%endfor%}

非常感谢!因为我认为这是唯一的解决方案:D