Validarea este un aspect important al interactiunii fiecarei aplicatii cu datele. In loc sa reinventam roata de fiecare data, comunitatea a colaborat la unele pachete utile precum Symfony, Laravel, Zend, etc. In acest articol, vom introduce un pachet mai putin cunoscut numit Respect Validation, care ofera cateva functii noi si frumoase. Sa incepem.

Pachetele populare de validare

Cand utilizati un cadru, exista sanse mari sa aveti o componenta de validare livrata impreuna cu acesta. Componenta validatorului Symfony ofera un set de reguli de validare standard de care aveti nevoie pentru aplicatia dvs.

clasa UserSubscriptionForm {email protejat $; public static function loadValidatorMetadata (ClassMetadata $ metadata) {$ metadata-> addPropertyConstraint (‘e-mail’, nou \ Assert \ Email ([‘mesaj’ => ‘E-mail nevalid “])); }}

Sunt sigur ca formularul dvs. de abonament contine mai mult decat un e-mail, dar haideti sa il pastram simplu. In interiorul controlorului dvs. va trebui sa declansati validarea astfel:

public function store (Request $ request) {$ userSubscriptionForm = UserSubscriptionForm :: fromInput ($ request-> all ()); $ validator = $ this-> get (‘validator’); $ erori = $ validator-> validare ($ userSubscriptionForm); if (numar (erori $)> 0) {// redirectionare cu erori} // returnare succes}

Dupa crearea unui nou UserSubscriptionForm din intrarea utilizatorului, vom declansa validarea si vom colecta erorile de validare daca am gasit.

Laravel se livreaza si cu pachetul de validare Illuminate. Face aceeasi treaba, dar intr-un mod diferit. Sa folosim exemplul nostru anterior de validare si sa-l convertim in Laravel.

class UserSubscriptionController extinde Controller {magazin de functii publice (Cerere $ cerere) {$ validator = \ Validator :: make ([’email’ => $ request-> get (’email’)), [’email’ => ‘obligatoriu | e-mail’ ] ); if ($ validator-> esueaza ()) {$ erori = $ validator-> mesaje (); // redirectionare cu erori} // returnare succes}}

Pachetul de validare Zend nu este cu mult diferit de celelalte. Pentru acelasi exemplu anterior, putem face urmatoarele:

class UserSubscriptionController extinde Controller {magazin de functii publice (Cerere $ cerere) {$ validator = new Zend \ Validator \ EmailAddress (); if (! $ validator-> isValid ($ request-> get (’email’))) {$ errors = $ validator-> getMessages (); // redirectionare cu erori} // returnare succes}}

Sunt sigur ca sunteti deja familiarizati cu cel putin unul dintre pachetele mentionate mai sus. In acest articol, vom prezenta Respect / validare si vom evidentia principalele diferente fata de celelalte pachete.

Validarea respectului

Validatorul Respect introduce un mod simplu de validare a datelor dvs. Sa incepem completand acelasi exemplu anterior.

class UserSubscriptionController extinde Controller {magazin de functii publice (Cerere $ cerere) {$ emailValidator = \ Respect \ Validare \ Validator :: email (); if (! $ emailValidator-> validate ($ email)) {// redirectionare cu erori} // returnare succes}}

Deci, nimic nou! Primul lucru pe care il veti observa este ca nu am recuperat lista de erori dupa o esec de validare. Pentru a prelua lista de erori, trebuie sa utilizam metoda de afirmare care arunca o exceptie care contine lista de mesaje de eroare.

class UserSubscriptionController extinde Controller {magazin de functii publice (Cerere $ cerere) {$ emailValidator = \ Respect \ Validare \ Validator :: email (); incercati {$ emailValidator-> assert ($ request-> get (’email’)); } catch (\ Respect \ Validare \ Exceptii \ NestedValidationExceptionInterface $ ex) {$ erori = $ ex-> getMainMessage (); // redirectionare cu erori} // returnare succes}}

De asemenea, avem capacitatea de a adauga mai multe reguli la aceeasi valoare prin metode de inlantuire.

Validator :: string () -> noWhitespace () -> lungime (4, 10); Validator :: numeric () -> intre (5, 10); Validator :: data () -> intre (5, 10);

Un alt mod de validare a mai multor reguli este utilizarea regulii allOf care accepta o lista de reguli.

$ inputValidator = \ Respect \ Validare \ Validator :: allOf (new String (), new Length (4, 10));

Probabil ca trebuie sa validati unele date care sa corespunda cel putin uneia dintre regulile dvs. de afaceri. Sa luam formularul de autentificare ca exemplu in care utilizatorul poate sa introduca adresa de e-mail sau numele de utilizator. Numele de utilizator trebuie sa fie alfanumeric si sa aiba intre 4 si 16 caractere. Puteti verifica documentatia pentru mai multe detalii despre lista de reguli disponibile.

$ usernameOrEmailValidator = \ Respect \ Validare \ Validator :: oneOf (nou \ Respect \ Validare \ Reguli \ Email (), \ Respect \ Validare \ Validator :: string () -> alnum () -> noWhitespace () -> lungime ( 4, 16));

O caracteristica pe care nu o vedeti des in pachetele de validare este functionalitatea de negatie a regulilor. Puteti specifica, de exemplu, regulile pe care nu doriti sa le corespundeti.

$ inputValidator = \ Respect \ Validare \ Validator :: nu (\ Respect \ Validare \ Validator :: numeric ());

Mesaje de eroare personalizate

Asa cum am mentionat anterior, atunci cand este aruncata o exceptie de afirmatie, puteti primi mesaje de eroare folosind una dintre urmatoarele metode.

  • getFullMessage: returneaza un mesaj de eroare general cu o lista a regulilor care nu reusesc. Validator de afirmare :: e-mail () -> assert (‘notAValidEmail’) va arunca urmatorul mesaj.

\ -Aceste reguli trebuie sa treaca pentru „notAValidEmail” \ – „notAValidEmail” trebuie sa fie un e-mail valid

  • getMainMessage: returneaza un mesaj de eroare general fara a specifica regulile care nu reusesc. Exemplul de e-mail returneaza Aceste reguli trebuie sa treaca pentru „notAValidEmail.
  • findMessages: accepta un tablou ca parametru care contine lista de mesaje pentru regulile care nu reusesc.

$ this-> messages = [‘alpha’ => ‘{{name}} trebuie sa contina doar caractere alfabetice.’, ‘alnum’ => ‘{{name}} trebuie sa contina numai caractere numerice si liniute.’, ‘numerice ‘=>’ {{name}} trebuie sa contina doar caractere numerice. ‘,’ noWhitespace ‘=>’ {{name}} nu trebuie sa contina spatii albe. ‘,’ lungime ‘=>’ {{name}} trebuie sa lungime intre {{minValue}} si {{maxValue}}. ‘,’ email ‘=>’ Va rugam sa va asigurati ca ati introdus o adresa de e-mail corecta. ‘,’ creditCard ‘=>’ Va rugam sa va asigurati ca ati tastat un numar de card valid. ‘, ‘date’ => ‘Asigurati-va ca ati tastat o data valabila pentru {{nume}} ({{format}}).’, ‘password_confirmation’ => ‘Confirmarea parolei nu se potriveste.’ ]; // in interiorul blocului try catch try {$ this-> rule [$ input] -> assert ($ value); } catch (\ Respect \ Validare \ Exceptii \ NestedValidationExceptionInterface $ ex) {dump ($ ex-> findMessages ($ this-> mesaje)); }

Acest lucru va intoarce un mesaj personalizat daca exista o regula care nu reuseste in tabloul nostru de mesaje. Puteti citi mai multe despre mesajele personalizate din documentatie.

Pentru a face lucrurile un pic mai practice, vom valida un formular de abonare pentru utilizatori. Formularul contine un set de campuri pentru identificarea utilizatorului si o mica sectiune pentru informatiile de facturare.

Validarea abonamentului utilizatorului

Voi folosi Laravel ca exemplu, dar cred ca nu conteaza in acest caz, deoarece nu folosim nicio magie Laravel. Puteti incepe adaugand pachetul folosind compozitor: compozitorul necesita respect / validare. Formularul de abonare al utilizatorului va arata astfel:

// resource / views / home.blade.php <form action = “/ send” method = “POST”> <legend> Profile </legend> <input class = “form-control” name = “username” type = ” text “autofocus =” “value =” {{\ Input :: old (‘username’)}} “> <input class =” form-control “name =” email “type =” email “value =” {{\ Input :: old (’email’)}} “> <input class =” form-control “name =” password “type =” password “value =” “> <input class =” form-control “name =” password_confirmation “type =” parola “> <legend> Facturare </legend> <input class = ‘form-control’ size = ‘4’ type = ‘text’ name =” cardHolderName “value =”{{\ Input :: old (‘cardHolderName’)}} “> <input class = ‘form-control’ size = ’20 ‘type =’ text ‘name =” cardNumber “value =” {{\ Input :: old (‘cardNumber’)}} “> <class input = ‘form-control’ size = ’20 ‘type =’ text ‘name =” billingAddress “value =” {{\ Input :: old (‘ billingAddress ‘)}} “> <input class = ‘form-control’ size = ‘4’ type = ‘text’ name =” cvc “value =” {{\ Input :: old (‘cvc’)}} “> <input class = ‘ form-control ‘size =’ 2 ‘type =’ text ‘name = “expirationMonth” value = “{{\ Input :: old (‘ expirationMonth ‘)}}”> <input class =’ ​​form-control ‘size =’ 4 ‘type =’ text ‘name = “expirationYear” value = “{{\ Input ::old (‘expirationYear’)}} “> <button class =” btn btn-primary “> Alaturati-va </button> </form> // app / Http / routes.php Route :: get (‘/’, ‘UserSubscriptionController @index ‘); Route :: post (‘ / send ‘,’ UserSubscriptionController @ send ‘);

Clasa noastra UserSubscriptionController va avea doua metode. Una pentru tiparirea formularului si alta pentru procesarea depunerii formularului. Vom crea o alta clasa separata pentru a procesa validarea formularului.

// app / Http / Controllers / Clasa UserSubscriptionController UserSubscriptionController extinde Controller {protected $ userSubscription; public function __construct (UserSubscriptionValidator $ userSubscription) {$ this-> userSubscription = $ userSubscription; } index functie publica () {vizualizare retur („acasa”); } public function send (Request $ request, Redirector $ redirector) {$ inputs = $ request-> all (); $ isValid = $ this-> userSubscription-> assert ($ intrari); if (! $ isValid) {return $ redirector-> back () -> withInput () -> cu (‘erori’, $ this-> userSubscription-> errors ()); } retur “Totul este bun!”; }}

Clasa App \ Validation \ UserSubscriptionValidator va fi expusa prin doua metode (afirmare si erori).

// app / Validation / UserSubscriptionValidator.php use \ Respect \ Validation \ Validator as V; class UserSubscriptionValidator {/ ** * Lista constrangerilor * * @var array * / protected $ rules = []; / ** * Lista mesajelor personalizate * * @var array * / mesajele protejate $ = []; / ** * Lista erorilor returnate in cazul unei afirmatii esuate * * @var array * / erori protejate $ = []; / ** * Doar un alt constructor * * @return void * / functia publica __construct () {$ this-> initRules (); $ This-> initMessages (); } / ** * Setati restrictiile de abonare a utilizatorului * * @return void * / functia publica initRules () {$ dateFormat = ‘dm-Y’; $ now = (nou \ DateTime ()) -> format ($ dateFormat); $ tenYears = (nou \ DateTime (‘+ 10 ani’)) -> format ($ dateFormat); $ this-> rules [‘username’] = V :: alnum (‘_’) -> noWhitespace () -> lungime (4, 20) -> setName (‘Username’); $ this-> rules [‘password’] = V :: alnum () -> noWhitespace () -> lungime (4, 20) -> setName (‘parola’); $ this-> rules [’email’] = V :: email (); $ this-> rules [‘cardHolderName’] = V :: alpha () -> setName (‘numele titularului cardului’); $ this-> rules [‘cardNumber’] = V :: creditCard () -> setName (‘numar card’); $ this-> rules [‘billingAddress’] = V :: string () -> lungime (6) -> setName (‘adresa de facturare’); $ this-> rules [‘cvc’] = V :: numeric () -> lungime (3, 4) -> setName (‘CVC’); $ this-> rules [‘expirationDate’] = V :: date ($ dateFormat) -> intre ($ acum, $ zece ani) -> setName (‘data de expirare’); }} Nume de utilizator’); $ this-> rules [‘password’] = V :: alnum () -> noWhitespace () -> lungime (4, 20) -> setName (‘parola’); $ this-> rules [’email’] = V :: email (); $ this-> rules [‘cardHolderName’] = V :: alpha () -> setName (‘numele titularului cardului’); $ this-> rules [‘cardNumber’] = V :: creditCard () -> setName (‘numar card’); $ this-> rules [‘billingAddress’] = V :: string () -> lungime (6) -> setName (‘adresa de facturare’); $ this-> rules [‘cvc’] = V :: numeric () -> lungime (3, 4) -> setName (‘CVC’); $ this-> rules [‘expirationDate’] = V :: date ($ dateFormat) -> intre ($ acum, $ zece ani) -> setName (‘data de expirare’); }} Nume de utilizator’); $ this-> rules [‘password’] = V :: alnum () -> noWhitespace () -> lungime (4, 20) -> setName (‘parola’); $ this-> rules [’email’] = V :: email (); $ this-> rules [‘cardHolderName’] = V :: alpha () -> setName (‘numele titularului cardului’); $ this-> rules [‘cardNumber’] = V :: creditCard () -> setName (‘numar card’); $ this-> rules [‘billingAddress’] = V :: string () -> lungime (6) -> setName (‘adresa de facturare’); $ this-> rules [‘cvc’] = V :: numeric () -> lungime (3, 4) -> setName (‘CVC’); $ this-> rules [‘expirationDate’] = V :: date ($ dateFormat) -> intre ($ acum, $ zece ani) -> setName (‘data de expirare’); }} rules [’email’] = V :: email (); $ this-> rules [‘cardHolderName’] = V :: alpha () -> setName (‘numele titularului cardului’); $ this-> rules [‘cardNumber’] = V :: creditCard () -> setName (‘numar card’); $ this-> rules [‘billingAddress’] = V :: string () -> lungime (6) -> setName (‘adresa de facturare’); $ this-> rules [‘cvc’] = V :: numeric () -> lungime (3, 4) -> setName (‘CVC’); $ this-> rules [‘expirationDate’] = V :: date ($ dateFormat) -> intre ($ acum, $ zece ani) -> setName (‘data de expirare’); }} rules [’email’] = V :: email (); $ this-> rules [‘cardHolderName’] = V :: alpha () -> setName (‘numele titularului cardului’); $ this-> rules [‘cardNumber’] = V :: creditCard () -> setName (‘numar card’); $ this-> rules [‘billingAddress’] = V :: string () -> lungime (6) -> setName (‘adresa de facturare’); $ this-> rules [‘cvc’] = V :: numeric () -> lungime (3, 4) -> setName (‘CVC’); $ this-> rules [‘expirationDate’] = V :: date ($ dateFormat) -> intre ($ acum, $ zece ani) -> setName (‘data de expirare’); }} lungime (6) -> setName („adresa de facturare”); $ this-> rules [‘cvc’] = V :: numeric () -> lungime (3, 4) -> setName (‘CVC’); $ this-> rules [‘expirationDate’] = V :: date ($ dateFormat) -> intre ($ acum, $ zece ani) -> setName (‘data de expirare’); }} lungime (6) -> setName („adresa de facturare”); $ this-> rules [‘cvc’] = V :: numeric () -> lungime (3, 4) -> setName (‘CVC’); $ this-> rules [‘expirationDate’] = V :: date ($ dateFormat) -> intre ($ acum, $ zece ani) -> setName (‘data de expirare’); }}

Constructorul nostru apeleaza la metoda initRules care stabileste constrangerile de validare. Valoarea metodei setName este injectata in sablonul de mesaje de eroare. Metoda initMessages stabileste lista de mesaje personalizate; acest lucru poate fi mutat in afara clasei, daca le veti folosi din nou pentru o alta forma.

Asigurati-va ca ati tastat o data valabila pentru {{nume}} ({{format}}). ‘,’ Password_confirmation ‘=>’ Confirmarea parolei nu se potriveste. ‘ ]; }

Eticheta {{nume}} va fi actualizata cu numele corespunzator transmis anterior folosind metoda setName. Unele reguli contin mai multe variabile, cum ar fi {{minValue}} si {{maxValue}} pentru regula lungimii. Acelasi lucru pentru regula datei.

porno gimnaste http://fearproof.net/__media__/js/netsoltrademark.php?d=adult69.ro/
filme porno alina plugaru http://weloveru.ru/bitrix/redirect.php?event1=&event2=&event3=&goto=https://adult69.ro/
jenifer lopez porno http://beless.com/__media__/js/netsoltrademark.php?d=adult69.ro/
porno in car http://www.podpet.com/__media__/js/netsoltrademark.php?d=adult69.ro/filme-porno/amatori
tia carrere porno http://walkergang.net/__media__/js/netsoltrademark.php?d=adult69.ro/filme-porno/anal
porno mature frumoase https://www.mendezortho.com/mobile/setlayout.php?mobile=0&redir=https://adult69.ro/filme-porno/asiatice
porno masaj hd http://dollar123.com/__media__/js/netsoltrademark.php?d=adult69.ro/filme-porno/beeg
dubla penetrare porno http://www.viralvideo.name/redirect.php?u=https://adult69.ro/filme-porno/blonde
porno russian https://www.avfocus.ru/bitrix/rk.php?id=385&site_id=af&event1=banner&event2=click&event3=40+%2F+385+MIDDLE+poz7+%C3%90%C2%BB%C3%91%C2%83%C3%91%C2%87%C3%91%C2%88%C3%90%C2%B8%C3%90%C2%B5+%C3%90%C2%BA%C3%90%C2%B5%C3%90%C2%B9%C3%91%C2%81%C3%91%C2%8B&goto=https://adult69.ro/filme-porno/brazzers
fete goale porno http://joyofbusiness.org/__media__/js/netsoltrademark.php?d=adult69.ro/filme-porno/brunete
animale porno http://beautywater.com/__media__/js/netsoltrademark.php?d=adult69.ro/filme-porno/chaturbate
porno sleeping http://video88.com/__media__/js/netsoltrademark.php?d=adult69.ro/blonda-de-16-ani-este-linsa-in-pizda-de-tatal-ei
bunicute porno
porno cu nicoleta luciu http://www.mustanggasproducts.biz/__media__/js/netsoltrademark.php?d=adult69.ro/film-porno-cu-un-cuplu-de-amatori-filmati-cu-camera-ascunsa
porno zoo http://fitnesspizza.com/__media__/js/netsoltrademark.php?d=adult69.ro/blona-frumoasa-care-seamana-cu-bianca-dragusanu-este-supusa-la-perversiuni
porno actrite http://nozulre.com/__media__/js/netsoltrademark.php?d=adult69.ro/studenta-face-show-la-web-si-se-masturbeaza-cu-un-vibrator
porno tata si fiica http://allamericanbaseball.com/__media__/js/netsoltrademark.php?d=adult69.ro/un-culpu-de-amatori-fac-sex-in-padure-o-fute-pe-la-spate-anal
filme porno pisy http://www.jerseydevil.net/guestbook/go.php?url=https://adult69.ro/fututa-cu-degetele-de-sora-ei-mai-mica
desene animate porno http://donsales.org/__media__/js/netsoltrademark.php?d=adult69.ro/curva-bruneta-care-stie-ce-vrea
filme porno cu mame bunaciuni http://ezduzit.net/__media__/js/netsoltrademark.php?d=adult69.ro/fetita-naiva-violata-de-bunic

Urmatorul pas este sa definim metoda noastra de afirmare pentru a efectua validarea reala.

/ ** * Reguli de validare a cererii. * * @param array $ intrari * Intrarile de validat. * @return boolean * Adevarat la succes; altfel, fals. * / public function assert (array $ inputs) {$ expirationMonth = array_get ($ intrari, ‘expirationMonth’); $ expirationYear = array_get ($ intrari, ‘expirationYear’); $ inputs [‘expirationDate’] = ’01 – ‘. $ expirareMonth. ‘-‘. $ ExpirationYear; foreach ($ this-> reguli ca $ rule => $ validator) {try {$ validator-> assert (array_get ($ inputs, $ rule)); } catch (\ Respect \ Validare \ Exceptii \ NestedValidationExceptionInterface $ ex) {$ this-> erori = $ ex-> findMessages ($ this-> mesaje); returnare falsa; }} $ passwordConfirmed = $ this-> assertPasswordConfirmation ($ intrari); returna $ parolaConfirmata; }

Primul pas este crearea unei date valabile incepand cu luna si anul de expirare. Aceasta ne va ajuta sa o validam cu usurinta in raport cu valorile date reale. Parcurgem lista regulilor de validare si testam daca intrarea utilizatorului se potriveste cu regula definita. Daca o afirmatie nu reuseste, setam atributul mesajului de eroare si returnam false controlerului.

In prezent, pachetul nu ofera o regula pentru validarea automata a confirmarii parolei. Metoda assertPasswordConfirmation va testa numai daca valorile trecute sunt egale si va seta mesajul de eroare in caz de esec.

functie publica assertPasswordConfirmation (tablou $ intrari) {$ passwordConfirmation = array_get ($ intrari, ‘password_confirmation’); if ($ inputs [‘password’]! == $ passwordConfirmation) {$ this-> errors [‘password_confirmation’] = $ this-> messages [‘password_confirmation’]; returnare falsa; } else {return true; }}

Ultima parte este sa returneze erorile utilizatorului daca nu reuseste si trebuie sa actualizam sablonul de acasa pentru a imprima erorile in caz de esec.

erori de functie publica () {return $ this-> erori; } // home.blade.php @if (\ Session :: are (‘erori’)) <div class = “alert alert-danger”> @foreach (\ Session :: get (‘erori’) ca eroare $) @if (! goala (eroare $)) <p> {{$ eroare}} </p> @endif @endforeach </div> @endif

Crearea propriilor dvs. reguli

Puteti sa va creati propriile reguli de afaceri si sa utilizati metoda cu pentru a adauga spatiul dvs. de nume la tabloul de cautare. Puteti verifica documentatia pentru mai multe detalii despre crearea propriilor restrictii.

Respect \ Validare \ Validator :: cu ( ‘App \\ de validare \\ utilizator \\ Reguli \\’);

Daca ati constatat ca regulile pe care incercati sa le utilizati exista intr-un pachet de validare Zend sau Symfony, le puteti utiliza direct folosind una dintre metodele urmatoare.

Respect \ de validare \ Validator :: sf ( ‘Language’) -> Validati ( ‘Araba’); Respect \ Validare \ Validator :: Zend ( ‘EmailAddress’) -> Validati (‘[email protected] ‘);

Concluzie

Acest articol a introdus pe scurt pachetul de validare Respect. Am vazut cat de simpla este API-ul si cum se integreaza cu alte validatoare precum Symfony si Zend. De asemenea, este usor de extins si de adaugat noi reguli la procesul de validare. Daca nu l-ati folosit niciodata, chiar va incurajez sa incercati. Daca l-ai folosit deja in unele dintre proiectele tale, mi-ar placea foarte mult sa stiu ce parere ai despre asta si cum se potriveste cazul de utilizare pe termen lung – anunta-ne in comentariile de mai jos!