2017-10-09 1 views
0

Dears,Symfony: Validieren Sie den E-Mail-Parameter mit ParamFetcher

Ich möchte E-Mail direkt im RequestParam validieren. Ich bin mit dieser Art von REGEX:

[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])? 

Aber der Parser konnte die Regex in Anforderungen Option

The parameter \"&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$\" must be defined. 

laden Wie kann ich E-Mail etwas wie das bestätigen:

/** 
* @Rest\Patch(
*  "v1/customer/update", 
*  name="Update a customer" 
*) 
* @RequestParam(
*  name="email", 
*  requirements="email", 
*  description="The email of the user", 
*  strict=true 
* ) 
*/ 

Vielen Dank im Voraus

+0

Sie können versuchen, Sonderzeichen zu umgehen. Wenn dies nicht funktioniert, können Sie immer einen benutzerdefinierten Validator registrieren. –

Antwort

0

Ich habe einen Service zu erhalten und zu konvertieren ap Parameter zu einem Value-Objekt, das es auch validiert, während es erstellt wird. Ich finde, dass dies viel mehr Kontrolle erlaubt, als in den Validierungen von RequestParam angegeben werden kann.

# In the same way a string is converted to a Entity, we can convert to a Vo\Username 
username_converter: 
    class: Ca\Api\Request\ParamConverter\UsernameConverter 
    tags: 
     - { name: request.param_converter, priority: -2, converter: username_converter } 

Die UsernameConverter Klasse war ganz einfach auch zu schaffen, die example folgende und die eingebauten in DoctrineParamConverter, aber durch den Wert in ein Objekt setzen, die auch überprüft wird, war es noch einfacher, da war kein Datenbankzugriff erforderlich

Wenn der Wert Object-Konstruktor Validierung fehlgeschlagen ist, wie folgt aus (dies für eine E-Mail wäre):

if (!filter_var($address, FILTER_VALIDATE_EMAIL)) { 
    throw new \InvalidArgumentException(sprintf('"%s" is not a valid email', $address)); 
} 

dann die Ausnahme von Rahmen gefangen wird.

Verwandte Themen