2017-02-07 13 views
0

Ich habe eine Symfony2-Form, die Felder benötigt, was in den meisten Browsern funktioniert, da das Attribut "required" auf den Eingaben steht und der Benutzer das Formular nicht ausfüllen kann, ohne das Feld auszufüllen .Symfony2 form validiert keine Pflichtfelder

Für die Browser, die das Attribut "required" nicht unterstützen, wird das Formular gesendet. Das verursacht ein Problem, da wenn die isValid() - Funktion des Formulars aufgerufen wird, True zurückgibt, obwohl die erforderlichen Felder leer sind.

Ist das normales Verhalten? Ich würde annehmen, dass es serverseitige Überprüfung der erforderlichen Felder während der HandleRequest-Funktion des Formulars geben würde, aber es scheint keine zu haben. Wenn nicht, gibt es eine Möglichkeit, dies zu ermöglichen?

+0

Denken Sie daran, jeder kann das DOM inpect und das gewünschte Attribut entfernen, das ist, warum Sie nicht auf sie allein verlassen sollte. Fügen Sie Ihrem Formularelement eine Einschränkung hinzu, um sicherzustellen, dass es dort ist. Z.B. 'Symfony \ Component \ Validator \ Constraints \ NotBlank' – Rooneyl

Antwort

2

Sie müssen diese Dinge entweder manuell überprüfen oder Sie müssen in Ihrer Entität validation constraints definieren, um die automatische Validierung zu aktivieren.

Wenn Symfony jetzt nicht prüft, was es prüfen soll, kann es die Validierung durchführen.

Hier ist ein Beispiel aus der oben verlinkten Dokumentation.

// src/AppBundle/Entity/Author.php 

// ... 
use Symfony\Component\Validator\Constraints as Assert; 

class Author 
{ 
    /** 
    * @Assert\NotBlank() 
    */ 
    public $name; 
} 

Mit diesem Constraint Sie Symfony doch sagen, dass das name Feld nicht leer sein muss. Wenn das Feld leer gesendet wird, schlägt die Formularvalidierung fehl.

Traue niemals Clientseite Validierung, da diese leicht modifiziert und für ungültig erklärt werden kann

+0

Danke, das hat funktioniert. Ich hätte angenommen, dass das Form-Objekt die Validierung sowohl am Frontend als auch am Backend durchführen würde (besonders beim Aufruf von isValid), es scheint etwas albern zu sein, die gleiche Validierung an zwei verschiedenen Stellen zu definieren. Wenn das Formular nur eine Front-End-Validierung durchführt, ist es ziemlich nutzlos, da Sie sich nicht darauf verlassen können und alles im Backend erneut überprüfen müssen. Aber ich kann mich nicht beschweren, da es jetzt funktioniert :) – dk80

+0

Das Feld 'required' ist nur eine Option für die' Ansicht' des Formulars, aber nicht für die Daten, die hinter dem Formular liegen. Aus diesem Grund betrifft dies nur die Ansicht, nicht jedoch die serverseitige Validierung. – KhorneHoly

+0

Wie ich weiß, wird empfohlen, die Assert-Anmerkung nicht mehr zu verwenden (obwohl die offizielle Dokumentation dies unterstützt). Die Lösung besteht darin, die entsprechende Validierungsklasse zu importieren (wie 'NotBlank') und dann einfach'/** * @ NotBlank() */'über dem Eigenschaftsnamen. Aber keine große Sache, ich denke ... –

Verwandte Themen