2016-10-14 2 views
1

Ich bin Rendering-Controller EmailControolerSymfony Anzeigeform Formfehler auf gerenderten Controller erstellt

/** 
* @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(), 
    )); 

} 

Innerhalb Zweig Vorlage

{{ render(controller('PTBEmailBundle:Email:insertEmail', {'request':app.request})) }} 

End every alles in Ordnung ist, die Form zeigt und fügt Daten in die Datenbank . ABER wenn das Formular nicht gültig ist, wird der Benutzer zu route/email umgeleitet, was soll ich tun, um Formularfehler in der gerenderten Ansicht anzuzeigen? Danke: D

Hier ist meine E-Mail-Einheit:

<?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; 
    } 
} 

Antwort

2

Wie here angegeben ist, alles, was Sie tun müssen, ist zu überprüfen, in der Aktion-Methode, für die Validierung Regeln, die Sie in der Entity-Klasse festgelegt haben .

Etwas wie:

$email = new Email(); 
// ... 
$validator = $this->get('validator'); 
$errors = $validator->validate($email); 

Dann, wenn es Validierungsfehler sind, dann schicken Sie einfach auf den gewünschten Zweig Vorlage:

if (count($errors) > 0) { 
    return $this->render('default/whatever.html.twig', array(
     'errors' => $errors, 
    )); 
} 

Und schließlich, um die Fehler anzuzeigen:

{# 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> 
+0

Vielen Dank! Wie ich dachte, das ist die einzige Lösung: D – misterlewy1

Verwandte Themen