Bygg webapplikasjoner fra scratch med Laravel Filtre, valideringer og filer

I denne Nettuts + mini-serien bygger vi et webprogram fra grunnen, mens du dykker inn i et flott nytt PHP-rammeverk som raskt tar opp damp, kalt Laravel.

I denne leksjonen lærer vi om noen svært nyttige Laravel-funksjoner: filtre, og både validering og filbiblioteker.


Anmeldelse

Velkommen tilbake til våre webprogrammer fra bunnen av med Laravel-serien! I den andre opplæringen av min mini-serie lærte vi mye om Laravels ORM-implementering:

  • Noen bakgrunn på "Modeller"
  • Hva Eloquent ORM er
  • Slik konfigurerer du Laravel databasekonfigurasjon
  • Hvordan lage din første Laravel-modell
  • De grunnleggende funksjonene til Auth og Input-bibliotekene
  • Gjør bruk av Eloquent ORM i en visning

Hvis du ikke har sett det ennå, oppfordrer jeg deg til å sjekke ut den første og andre delen av mini-serien - det vil gjøre det betydelig lettere å følge med, da vi bygger vår testapplikasjon, Instapics, gjennom hver del.

Så la oss komme i gang!


1 - Laravelfiltre

I et nøtteskall er filtre funksjoner som vi kan kjøre på ruter før eller etter forespørselssyklusen. Det er spesielt nyttig for ting som autentisering og logging. For å registrere et filter, må vi legge til noe som følger med application / routes.php fil:

Rute :: filter ('myfilter', funksjon () // Hva du vil at filteret skal gjøre);

Etter at vi har registrert filteret, må vi feste det på en rute, slik som:

Route :: any ('/', array ('before' => 'filter', funksjon () // Hva du vil at ruten skal gjøre));

I eksemplet ovenfor, er myfilter vil utløse på alle forespørsler til indekssiden (dvs.. /). La oss si at vi ønsket å implementere et autentiseringsfilter for dashbord rute:

Rute :: filter ('auth', funksjon () hvis (Auth :: gjest ()) return Omdirigering :: til ('hjem');); Route :: any ('dashboard', array ('før' => 'auth, funksjon () return View :: make (' dashboard '););

Koden ovenfor vil omdirigere alle uautoriserte forespørsler til dashbord rute til hjem rute.

Globale filtre

Som standard inneholder Laravel to filtre, før og etter, som kjører før og etter hver forespørsel på en søknad. Disse er vanligvis hvor du plasserer ting, for eksempel forespørsel logging, legge til globale eiendeler eller skyte globale hendelser. For eksempel:

Rute :: filter ('etter', funksjon ($ respons) Log :: skriv ('forespørsel', 'Forespørsel ferdig på' dato ('d M, Y - h: i: sA'). '. \ N \ nRequest informasjon: \ n '. var_export (Input :: get (), true)););

Dette skriver a be om skriv loggmeldingen til programmets logg, og lister inn noen innspill fra forespørselen.

Rutegrupper

Hvis du finner deg selv å bruke det samme filteret på flere ruter, kan du gjøre bruk av Rutegrupper å gruppere dem alle sammen og redusere koderepetisjon:

Rute :: filter ('admin_auth', funksjon () if (Auth :: gjest () ||! Auth :: bruker () -> isAdmin ()) retur Omdirigering :: til ('hjem'); ); Rute :: gruppe (array ('før' => 'admin_auth'), funksjon () Rute :: få ('admin', funksjon () return View :: make ('admin');); Rute: : get ('useradmin', funksjon () return View :: make ('useradmin');););

Kontrollerfiltre

For applikasjoner (som vår egen Instapics) som benytter kontroller, kan vi bruke filtre ved hjelp av $ Dette-> filter () fungere i kontrollerens konstruktør:

offentlig funksjon __construct () $ this-> filter ('før', 'auth'); 

Disse filtrene, som ruter, kan også tilpasses for å bare gjelde enkelte HTTP-verb og bestemte kontrollerhandlinger:

offentlig funksjon __construct () // call'log_download'filter for all nedlasting / fil GET forespørsler $ this-> filter ('after', 'log_download') -> only (array ('file')) -> på få'); // ring "auth_download" -filteret for alle nedlastinger / * forespørsler, bortsett fra "kø" -aksjonen $ this-> filter ('før', 'auth_download') -> unntatt (array ('kø')); 

2 - Laravel validering

Laravel er innebygd validering gjør det enkelt å bruke validering til en rekke verdier, mer spesifikt, form input. For å gjøre det, trenger du bare å bygge to arrays:

  • $ inngang - Dette er en assosiativ rekkevidde av verdiene du vil validere.
  • $ regler - Dette er en assosiativ array (med nøkler som er de samme som $ input-innstillingen) som lister ned valideringsreglene.
// Få vårt innspill fra Input-biblioteket $ input = Input :: all (); // Opprett våre valideringsregler $ rules = array ('email' => 'required | email | unique: users', 'password' => 'required'); // Få en $ validering instans for vår feilkontroll $ validation = Validator :: lage ($ input, $ rules); // Sjekk om valideringen lykkes hvis ($ validering-> feiler ()) // gjør noe med feilmeldingene fra $ validering instans $ validering-> feil; 

Valideringsregler

Nedenfor er en liste over valideringsregler som kan brukes med Laravel-valideringsbiblioteket. Som i eksemplet ovenfor, er du fri til å blande og matche disse ved å skille dem med et rør ("|"):

  • nødvendig - verdien skal være tilstede i inngangsarrangementet
     'email' => 'nødvendig'
  • alfa - verdien bør bare bestå av alfabetetegn
     'full_name' => 'alfa'
  • alpha_num - verdien bør bare bestå av alfanumeriske tegn
     'brukernavn' => 'alfa_num'
  • alpha_dash - verdien bør bare bestå av alfanumeriske, bindestreker og / eller understreker
     'user_name' => 'alpha_dash'
  • størrelse - verdien skal bare ha en gitt lengde, eller være lik tallet hvis det er numerisk
     'api_key' => 'størrelse: 10'
     'order_count' => 'størrelse: 10'
  • mellom - verdien er inklusiv mellom et spesifisert område
     'order_count' => 'mellom: 1,100'
  • min - verdien er minst gitt
     'order_count' => 'min: 1'
  • max - verdien er lik eller mindre enn den oppgitte
     'order_count' => 'max: 100'
  • numerisk - verdien er numerisk
     'order_count' => 'numerisk'
  • heltall - verdien er et heltall
     'order_count' => 'heltall'
  • i - verdien er inneholdt i den oppgitte
     'tshirt_size' => 'i: xsmall, liten, medium, stor, xlarge'
  • ikke i - verdien er ikke gitt
     'tshirt_size' => 'not_in: xsmall, xlarge'
  • bekreftet - vil sjekke om nøkkel_bekreftelse eksisterer og er lik verdien
     'passord' => 'bekreftet'

    Dette vil sjekke om Passord bekreftelse verdien eksisterer og er lik passord

  • akseptert - Dette vil sjekke om verdien er satt til "ja" eller 1. Nyttig for boksene
     'terms_of_service' => 'accepted'
  • samme - verdien er den samme som verdien for det oppgitte attributtet
     'passord' => 'samme: confirm_password'
  • forskjellig - verdien skal være forskjellig fra verdien til det oppgitte attributtet
     'passord' => 'annerledes: old_password'
  • kamp - verdien skal samsvare med det gitte regulære uttrykket
     'user_name' => 'match: / [a-zA-Z0-9] * /'
  • unik - sjekker for unikhet av verdien i den oppgitte tabellen.
     'user_name' => 'unikt: brukerens'

    En gitt kolonne er også akseptert dersom kolonnens navn ikke er det samme som attributtnavnet.

     // hvis kolonnen i brukerbordet er brukernavn, // vi kan gi dette i gitt slik: 'user_name' => 'unikt: brukere, brukernavn'

    Det er tider når vi ønsker å se etter unikhet, men ignorere en bestemt post (vanligvis posten som er knyttet til den nåværende brukeren). Vi kan gjøre dette ved å legge til en tredje gitt, som skal være IDen til den posten i tabellen.

     // ID 10 er registrerings-ID for gjeldende bruker 'user_name' => 'unikt: brukere, brukernavn, 10'
  • finnes - verdien bør finnes i en tabell
     'kategori' => 'eksisterer: kategorier'

    Dette aksepterer også et sekund gitt hvis vi vil endre kolonneavnet for å sjekke.

     'category' => 'eksisterer: kategorier, kategorinavn'
  • før - verdien skal være en dato før den oppgitte datoen
     'publish_date' => 'før: 2012-07-14'
  • etter - verdien skal være en dato etter den oppgitte datoen
     'publish_date' => 'etter: 2012-07-14'
  • e-post - verdien skal være i et gyldig e-postformat
     'subscriber_email' => 'email'
  • url - verdien er i et gyldig url format
     'github_profile' => 'url'
  • active_url - verdien er i et gyldig url format og er aktiv
     'github_profile' => 'active_url'
  • mimes - sjekker for mime-typen av en opplastet fil. Du kan bruke hvilken som helst mime-type verdi fra config / mimes.php fil
     'avatar' => 'mimes: jpg, gif, png, bmp'
  • bilde - filen skal være et bilde
     'avatar' => 'bilde'

    Du kan også bruke max validator her for å sjekke for en fils størrelse i kilobytes

     'avatar' => 'bilde | max: 100'

Feilhåndtering

Når du ringer til Validator-> svikter () eller Validator-> passerer () metode samler biblioteket alle feilene i en klasse som er tilgjengelig via Validator-> feil. Du vil da kunne hente disse feilene med noen funksjoner i feil klasse. Laravel gir noen kule funksjonalitet for å automatisere feilhåndtering som passer i de fleste POST / REDIRECT / GET-scenarier:

class Register_Controller utvider Base_Controller public $ restful = true; offentlig funksjon get_index () return View :: make ('register.index');  offentlig funksjon post_index () $ rules = array ('email' => 'kreves | e-post | unikt: brukere', 'passord' => 'bekreftet'); $ validation = Validator :: make (Input :: get (), $ rules); hvis ($ validering-> feiler ()) // Send $ valideringsobjektet til den omdirigerte siden returnere Omdirigering :: til ('registrer') -> with_errors ($ validering); 

Her bruker vi with_errors metode for omdirigere bibliotek. Dette binder automatisk til $ feil variabel i visningen for hvor vi omdirigerer - i dette tilfellet, registrer / indeks side:

$ $ feilvariabel passert via with_errors - @if ($ errors-> har ('email')) @foreach ($ errors-> get ('email'

:budskap

') som $ email_error) $ email_error @endforeach @endif @if ($ feil-> har ('passord')) @foreach ($ errors-> get ('passord', '

:budskap

') som $ password_error) $ password_error @endif

På visningsfilen bruker vi $ Errors-> har () Metode for å sjekke om det finnes en feil for det aktuelle feltet. Hvis det gjør det, bruker vi deretter $ Errors-> get () Metode for å vise feilmeldingene. Den andre parameteren i denne metoden kan brukes til å gi en mal om hvordan vi viser feilmeldingen.

Egendefinerte feilmeldinger

Siden de fleste vil ønske å endre feilmeldingene for Laravel for å passe til programmets merkevarebygging eller språk, tillater Validation-biblioteket også å tilpasse feilmeldingene som genereres ved ganske enkelt å legge til i en $ messages array til Validere :: gjøre funksjonsanrop:

$ rules = array ('email' => 'required | email | unique: users', 'password' => 'bekreftet'); $ messages = array ('email_required' => 'Vennligst oppgi en e-postadresse', 'email_email' => 'Vennligst oppgi en gyldig e-postadresse', 'email_unique' => 'Epostadressen du oppgav er allerede brukt' password_confirmed '=>' Ditt passordbekreftelse stemmer ikke overens med passordet ditt. '); $ validation = Validator :: make (Input :: get (), $ rules, $ messages);

Det er to måter å opprette en $ messages matrise:

  • Regelbasert - Du kan gi en egendefinert melding for alle feltene som er validert av en bestemt regel. For eksempel:
     $ messages = array ('required' => 'Feltet: attributt skal kreves.', 'same' => 'The: attributtet og: andre må matche.', 'size' => 'Attributtet må være nøyaktig: størrelse. ',' mellom '=>' Attributtet må være mellom: min -: maks. ',' i '=>' Attributtet må være en av følgende typer:: verdier ');

    Dette vil endre standard feilmeldinger for alle felt som har Kreves, samme, størrelse, mellom og inn regler. Her ser vi også at Laravel bruker plassholdere til å erstatte bestemte verdier i feilmeldingen. :Egenskap vil forandre seg i feltattributtet (sans understreker) det er for. :annen brukes til samme regelen, som refererer til den andre attributtet den skal samsvare med. :størrelse refererer til den definerte størrelsen i regelparametrene. : min og : max er minimum og maksimumsverdier, og : verdier er listen over verdier vi angav at feltets verdi må være i.

  • Attributt-baserte - På den annen side kan du også gi en egendefinert melding for et bestemt attributt på en bestemt regel. Ta vårt eksempel fra oven:
     $ messages = array ('email_required' => 'Vennligst oppgi en e-postadresse', 'email_email' => 'Vennligst oppgi en gyldig e-postadresse', 'email_unique' => 'Epostadressen du oppgav er allerede brukt' password_confirmed '=>' Ditt passordbekreftelse stemmer ikke overens med passordet ditt. ');

    email_required er feilmeldingen som brukes når e-post attributtet mislykkes nødvendig regel, email_email er feilmeldingen som brukes når e-post mislykkes e-post regelen og så videre.

Hvis du finner deg selv omvendt å gjenopprette de samme egendefinerte meldingene, ville det være lettere å bare angi de egendefinerte feilmeldingene globalt. Du kan gjøre det ved å redigere application / langauge / en / validation.php fil og redigere tilpasset array funnet der:

... 'custom' => array (' email_required '=>' Vennligst oppgi en e-postadresse ',' email_email '=>' Vennligst oppgi en gyldig e-postadresse ',' email_unique '=>' Epostadressen du oppgav, brukes allerede ',' password_confirmed '=>' Ditt passordbekreftelse stemmer ikke overens med passordet ditt. '); ... 

3 - Laravel-filer

Håndtering av filopplastinger

Laravel s filer biblioteket gjør det enkelt å håndtere filopplastinger ved å bruke Input :: opplasting metode, som er et enkelt omslag til PHP move_uploaded_file funksjon:

Input :: opplasting ('input_name', 'katalog / til / lagre / fil', 'filnavn.extension');

For å validere filopplastingene, kan du bruke Validator bibliotek vi diskuterte over som:

$ input = array ('upload' => Input :: fil ('opplasting')); $ rules = array ('upload' => 'mimes: zip, rar | max: 500'); $ validator = Validator :: lage ($ input, $ rules);

Filhåndtering

De filer biblioteket har også noen filmanipuleringsmetoder, som:

// Få en fil $ data = File :: get ('path / file.extension'); // Skriv en fil Fil :: put ('path / file.extension', $ data); // Vedlegg til en fil Fil :: legg til ('bane / fil.extension', $ data);

Filrelaterte funksjoner

Laravel gir også noen generelle formålstilknyttede funksjoner som kan brukes i hele koden din. For eksempel, Filutvidelse metode returnerer utvidelsen av et streng filnavn:

// Dette vil returnere 'zip' File :: extension ('data.zip');

De Fil :: er funksjonen sjekker om en fil er av en bestemt type. Vær oppmerksom på at dette ikke bare sjekker filens utvidelse, men bruker Fileinfo PHP-utvidelse for å lese det faktiske innholdet i filen. Dette er nyttig for å bestemme at en fil egentlig har en korrekt filtype:

// Returnerer sant hvis filen er en zip-fil, falsk hvis ellers Fil :: er ('zip', 'path / file.zip');

En liste over kompatible utvidelser kan ses i application / konfig / mimes.php.

Når det gjelder mime typer, kan du også bruke Fil :: mime funksjon for å få mime typer av en forlengelse. Den returnerte mime-typen er basert på det samme mimes.php fil:

// Dette vil returnere bilde / png Fil :: mime ('png')

De Fil :: cpdir og Fil :: rmdir metoder kan kopiere og slette en katalog, henholdsvis.

Fil :: cpdir ('katalog / til / kopi', 'destinasjon / katalog'); // Fil :: rmdir er en rekursiv sletting, så det vil slette alle filer og mapper i katalogen. Fil :: rmdir ( 'katalog / til / slette');

Nå som vi har lært alt om filtre, de Validering bibliotek og filer bibliotek, la oss implementere dem i vår søknad, Instapics.


Trinn 1 Opprett en auth Filter

Legg til filtre til Base_Controller

La oss starte med å sørge for at brukerne våre bare kan se godkjente sider ved å opprette en auth filter som kjører før alle forespørsler. Siden vi bruker kontrollerbasert ruting, må vi konfigurere våre filtre i vår kontroller. La oss sette filtene i __construct metode av Base_Controller for å sikre at auth Filter kjører på alle kontroller som strekker seg. Mens vi er på det, la vi legge til en nonauth filtrer også for å sikre at folk bare kan besøke bestemte sider når de ikke er autentisert:

klassen Base_Controller utvider kontrolleren offentlig funksjon __construct () // Assets Asset :: add ('jquery', 'js / jquery-1.7.2.min.js'); Asset :: add ('bootstrap-js', 'js / bootstrap.min.js'); Asset :: add ('bootstrap-css', 'css / bootstrap.min.css'); Asset :: add ('bootstrap-css-responsive', 'css / bootstrap-responsive.min.css', 'bootstrap-css'); Asset :: add ('style', 'css / style.css'); ordnede :: __ konstruksjon (); // Filtre $ class = get_called_class (); bytte ($ klasse) case 'Home_Controller': $ this-> filter ('før', 'nonauth'); gå i stykker; tilfelle 'User_Controller': $ this-> filter ('before', 'nonauth') -> only (array ('authenticate')); $ dette-> filter ('før', 'auth') -> bare (array ('logout')); gå i stykker; standard: $ this-> filter ('før', 'auth'); gå i stykker; 

Her definerer vi eventuelle forespørsler til hjem ruten vil kreve en ikke-godkjent bruker, noe som er bra siden dette er der påloggingsskjermen ligger. Enhver annen forespørsel vil imidlertid kreve en autentisert bruker. For User_Controller, Vi har faktisk to separate metoder som krever både ikke-godkjente brukere (autentiser) og autentiserte brukere (logout), så vi benytter seg av bare Metode for å spesifisere hvilke kontrolleringshandlinger filtre gjelder for.

Opprett filterdefinisjoner i routes.php

Nå åpen application / routes.php, som er hvor vi skal definere auth og nonauth filtre. Vær oppmerksom på at du kanskje allerede har en eksisterende auth filterdefinisjon, så bare erstatt den med den vi har under:

Rute :: filter ('auth', funksjon () hvis (Auth :: gjest ()) returnere Omdirigering :: til ('hjem');); Rute :: filter ('nonauth', funksjon () hvis (Auth :: gjest () == false) returnere Omdirigering :: til ('dashbord'););

I auth filter, vi sjekker om en bruker er autentisert med Auth bibliotek. Hvis brukeren ikke er autentisert, omdirigerer vi dem tilbake til hjem rute hvor påloggingsskjermen er, ellers kan de fortsette. Det samme med nonauth filter - kontroller om brukeren er autentisert, hvis han er, og omdiriger deretter han til dashbordet.


Trinn 2 Implementere brukeropplastinger

Opprett bildeopplastingsskjema

Nå som vi vet litt mer om hvordan du håndterer filopplastinger i Laravel, la oss begynne å implementere en av Instapics'hovedfunksjoner - opplasting av bilder. Begynn med å opprette en mappe som heter application / visninger / plugins mappe, og inne i dette oppretter du en Blade-visning fil som heter upload_modal.blade.php. Lim inn følgende HTML:

Last opp en ny Instapic

Avbryt

Lag knapputløseren

La oss utløse dette modale skjemaet med en knapp - legg til dette inn application / visninger / oppsett / main.blade.php, etter .nav-kollaps div:

    @section ( 'navigasjon')
  • Hjem
  • @yield_section
@section ('post_navigation') @if (Auth :: check ()) @include ('plugins.loggedin_postnav') @endif @yield_section

Her inkluderer vi en visningsfil som heter loggedin_postnav hvis brukeren er logget inn. Dette er hvor vi legger til knappen for modal opplastingsskjema. I samme fil legger du til dette etter .container div:

@yield ( 'innhold')

© Instapics 2012

@section ('modals') @if (Auth :: check ()) @include ('plugins.upload_modal') @endif @yield_section

Det er her vi inkluderer upload_modal HTML. Vi forsikrer deg om at brukeren ikke er logget inn før du inkluderer denne HTML-filen, siden det som knapputløseren, ville dette egentlig ikke være nødvendig hvis brukeren ikke er autentisert.

Lag nå application / synspunkter / plugins / loggedin_postnav.blade.php

Oppdater siden, og du bør se den nye opplastningsknappen - klikk på den for å se at den fungerer!

Koble skjemaet til riktig kontroller

Nå som vi har våre front-end ting jobber, la oss begynne å jobbe på den bakre delen av skjemaet. Skape application / kontrollere / photo.php, og sett inn følgende kode for kontrolleren:

klasse Photo_Controller utvider Base_Controller offentlig funksjon action_upload () $ input = Input :: all (); $ extension = File :: extension ($ input ['foto'] ['navn']); $ directory = path ('public'). 'opplastinger /'. sha1 (Auth :: user () -> id); $ filename = sha1 (Auth :: user () -> id.time ()). ". $ extension"; $ upload_success = Input :: opplasting ('foto', $ katalog, $ filnavn); hvis ($ upload_success) Session :: flash ('status_success', 'Vellykket lastet opp nye Instapic');  else Session :: flash ('status_error', 'Det oppstod en feil under opplasting av ny Instapic - prøv igjen.');  hvis ($ upload_success) $ photo = nytt bilde (array ('location' => URL :: til ('opplastinger /'. sha1 (Auth :: user () -> id). '/'. $ filnavn) , 'description' => $ input ['description']))); Auth :: bruker () -> bilder () -> sett ($ bilde);  returnere omdirigering :: til ('dashbord'); 

Prøv det - du bør kunne begynne å laste opp nye installasjoner.

Legg til validering på opplastingsskjemaet

La oss legge til noen valideringsregler for dette for å sikre at brukeren bare sender de riktige tingene. Oppdater kontrolleren med følgende:

klasse Photo_Controller utvider Base_Controller offentlig funksjon action_upload () $ input = Input :: all (); hvis (isset ($ input ['description'])) $ input ['description'] = filter_var ($ input ['description'], FILTER_SANITIZE_STRING, FILTER_FLAG_NO_ENCODE_QUOTES);  $ rules = array ('photo' => 'required' image | max: 500 ', // bildeopplastning må være et bilde og må ikke overstige 500kb' description '=>' required '// beskrivelse er nødvendig); $ validation = Validator :: make ($ input, $ rules); hvis ($ validering-> mislykkes ()) return Omdirigering :: til ('dashbord') -> with_errors ($ validering);  $ extension = File :: extension ($ input ['foto'] ['navn']); $ directory = path ('public'). 'opplastinger /'. sha1 (Auth :: user () -> id); $ filename = sha1 (Auth :: user () -> id.time ()). ". $ extension"; $ upload_success = Input :: opplasting ('foto', $ katalog, $ filnavn); hvis ($ upload_success) $ photo = nytt bilde (array ('location' => URL :: til ('uploads /'. sha1 (Auth :: user () -> id). '/'. $ filnavn) 'description' => $ input ['description']))); Auth :: bruker () -> bilder () -> sett ($ bilde); Session :: flash ('status_success', 'Vellykket lastet opp den nye Instapic');  else Session :: flash ('status_error', 'Det oppstod en feil under opplasting av den nye Instapic - prøv igjen.');  returnere omdirigering :: til ('dashbord'); 

Se hvordan vi validerer inngangen? Vi sørger for at bildet er til stede, et bilde og mindre enn 500kb. Vi sørger også for at beskrivelsen er tilstede etter sanitet. Vi kan ikke se våre feilmeldinger ennå, men la oss fikse det ved å legge til noen HTML for å gjengi våre feilmeldinger. Åpen application / visninger / oppsett / main.blade.php og legg til følgende inne i .container div:

@include ('plugins.status') @yield ('innhold')

© Instapics 2012

Lag nå application / synspunkter / plugins / status.blade.php. Det er her vi skal gjengi de faktiske feilmeldingene. Vi legger også til støtte for sesjonsbaserte statusmeldinger (som den vi bruker inne i $ upload_success sjekk på Bilder kontrollerkode):

@if (isset ($ errors) && count ($ errors-> all ())> 0) 
x

Oh Snap!

    @foreach ($ errors-> all ('
  • :budskap
  • ') som $ melding) $ message @endforeach
@elseif (! is_null (Session :: get ('status_error'))))
x

Oh Snap!

@if (is_array (Session :: get ('status_error'))))
    @foreach (Session :: get ('status_error') som $ feil)
  • $ error
  • @endforeach
@else Session :: get ('status_error') @endif
@endif @if (! is_null (Session :: get ('status_success'))))
x

Suksess!

@if (is_array (Session :: get ('status_success'))))
    @foreach (Session :: get ('status_success') som $ suksess)
  • $ suksess
  • @endforeach
@else Session :: get ('status_success') @endif
@slutt om

Prøv å forårsake feil på opplastingsskjemaet nå ved å sende inn uten fil valgt eller uten beskrivelse (siden begge er påkrevd). Du bør se feilmeldingene som blir gjengitt på toppen:


Trinn 3 Legg til validering til registrerings- og innloggingsskjemaet

Nå som vi vet hvordan du bruker Laravel Validering bibliotek, la oss gå tilbake til vårt første skjema - påmeldings- og registreringsskjemaet. For øyeblikket bruker vi bare en ekko for å se at innlogging eller registrering mislyktes - la oss erstatte det med riktig validering. Åpen application / kontrollere / user.php og oppdater det slik:

klasse User_Controller utvider Base_Controller offentlig funksjon action_authenticate () $ email = Input :: get ('email'); $ password = Input :: get ('passord'); $ new_user = Input :: get ('new_user', 'off'); $ input = array ('email' => $ email, 'password' => $ passord); hvis ($ new_user == 'on') $ rules = array ('email' => 'required | email | unique: users', 'password' => 'required'); $ validation = Validator :: make ($ input, $ rules); hvis ($ validering-> mislykkes ()) return Omadressering :: til ('hjem') -> with_errors ($ validering);  prøv $ user = ny bruker (); $ user-> email = $ email; $ user-> password = Hash :: make ($ password); $ Bruker-> Lagre (); Auth :: innlogging ($ bruker); returnere omdirigering :: til ('dashbord');  fangst (Unntak $ e) Session :: flash ('status_error', 'Det oppstod en feil under oppretting av en ny konto - prøv igjen.'); returnere omdirigering :: til ('hjem');  else $ rules = array ('email' => 'required | email | exists: users', 'password' => 'required'); $ validation = Validator :: make ($ input, $ rules); hvis ($ validering-> mislykkes ()) return Omadressering :: til ('hjem') -> with_errors ($ validering);  $ credentials = array ('brukernavn' => $ email, 'passord' => $ passord); hvis (Auth: forsøk ($ credentials)) return Omdirigering :: til ('dashbord');  else Session :: flash ('status_error', 'Din epost eller passord er ugyldig - prøv igjen.'); returnere omdirigering :: til ('hjem');  offentlig funksjon action_logout () Auth :: logout (); Omdirigere :: til ( 'home / index'); 

Siden vi har gjort våre statusmelding gjengivelser på en modulær måte, trenger vi ikke engang å skrive noen ekstra HTML for å se feilmeldingene i aksjon! Bare prøv det ut!


Konklusjon

I den tredje opplæringen i vår Laravel serier, lærte vi:

  • Hvordan, når og hvor du skal bruke Laravel filtre
  • Hvordan bruke Laravel Validering bibliotek, og hvordan man håndterer Validering bibliotekets feil.
  • Slik administrerer du filer i Laravel ved hjelp av filer bibliotek

Laravel kommer med mange av disse småfunksjonene og bibliotekene, som selv om de kan implementeres på andre måter, blir enklere og enklere (for eksempel filopplastninger i en enkelt linje!) Ved å vedta Laravels uttrykksfulle natur. Det er disse små tidsbesparende bibliotekene legger opp og over tid, sparer deg massevis av bortkastet produktivitetsomskrivningskode.

Neste i våre Webapplikasjoner fra Scratch med Laravel-serien, lærer vi mer om hendelser, migreringer og noen avansert bruk av Eloquent ORM!

Hva synes du om Laravel-bibliotekene som er omtalt i opplæringen? Er det noe du synes er nyttig? Gi meg beskjed i kommentarene! Og, hvis du er Tuts + Premium-medlem, hold deg oppdatert for vårt kommende Laravel Essentials kurs!