Som PHP-utvikler kan du bruke unntak, fordi de lar deg legge merke til når noe har gått galt eller brukeren har handlet på en uvanlig måte (for eksempel divisjon med null). Uten unntak, vil søknaden din ende opp med å presentere uønskede feil og være mye vanskeligere å feilsøke. Det er også viktig at du stopper utførelsen umiddelbart og ta et nytt handlingsforløp.
Unntak er veldig enkle, og de vil gjøre utviklingsprosessen enklere. Når du lærer å bruke unntak, vil dette være en vanlig del av utviklingen din.
Jeg tror den beste definisjonen for unntak er gitt av Martin Fowler:
Unntak signaler noe utenfor de forventede grensene for oppførsel av koden i spørsmålet.
Nøyaktig, et unntak er en hendelse som oppstår under utførelsen av et program, som forstyrrer den normale strømmen av programmets instruksjoner. Når du kaste
(opprett et unntaksobjekt og gi det til runtime-systemet) et unntak, vil systemet å fange
det ved å søke etter den aktuelle håndtereren og returnere den riktige meldingen.
prøv // koden går her fangst (Unntak $ e) // hvis et unntak skjedde i forsøksblokken ovenfor
Bruk unntak når systemet ditt står overfor eksepsjonelle omstendigheter som hindrer at systemet overtar. Vi bruker kun unntak når systemet ikke klarer å finne ut hva som har skjedd. Martin Fowler mener at "hvis en feil er forventet atferd, bør du ikke bruke unntak". Dette betyr at du bør bruke unntak der du ikke kan bestemme feilen. Unntak bør bare brukes i unntakstilfeller.
Merk: Unntak er ikke bra for å håndtere logikkoperasjoner.
For et system som validering av inngang, er det unntatt å bruke unntak feil. Først av alt vil inntastingen bli bestemt, og i et program som dette skal vi rapportere en samling feil i stedet for en enkelt feil. Jeg tror på å eliminere bruken av unntak under alle omstendigheter der vi kanskje forventer valideringsfeil.
Å fange et unntak er svært viktig, fordi hvis du ikke får et unntak, vil systemet returnere en feil. Fangstoperasjonen må være så nær feilfeltet som mulig.
Laravel bruker unntakshåndterer, som er en klasse i App \ Unntak \ Handler.php
. Denne klassen inneholder to hovedmetoder (the renderHttpException
Metoden, som brukes for alle HTTP-unntak, som 404s og 503s, er i parentes-klassen av Handler). Den første er rapportere
, som brukes til å logge unntak eller sende dem til en ekstern tjeneste. Her er et eksempel på rapportmetoden:
offentlig funksjonsrapport (unntak $ e) hvis ($ e instanceof CustomException) // returnerer foreldre :: rapport ($ e);
Den andre er gjengi
. Gjenvinningsmetoden er ansvarlig for å konvertere et gitt unntak til et HTTP-svar som skal sendes tilbake til nettleseren. Her er et eksempel på gjengivelsesmetoden:
offentlig funksjon gjengivelse ($ request, Unntak $ e) if ($ e instanceof CustomException) return response () -> view ('errors.custom', [], 500); returforeldre :: gjengivelse ($ forespørsel, $ e);
Merk: Du kan bruke $ dontReport
Egenskapen til unntakshandleren for å ignorere unntak etter type.
Du kan overstyre Laravel-unntaksmetoder i ditt eget unntak som:
Offentlig funksjon gjengi ($ request, Unntak $ e) if (config ('app.debug')) return parent :: render ($ request, $ e); returnere $ this-> handle ($ request, $ e);
Dette vil gjengi når config debug er sant.
Du må kanskje lage din egen unntaksklasse. Du må strekke seg fra Laravelbasen Unntaksklasse-Jeg har laget en abstrakt klasse som vil oppføre seg som grunnklassen til vår tilpassede Unntaksklasse. Lag en fil i App / Unntak / monException.php
:
navneområde App \ Unntak; bruk unntak; abstrakt klasse monException utvider unntak beskyttet $ id; beskyttet $ detaljer; offentlig funksjon __construct ($ message) foreldre :: __ konstruere ($ melding); beskyttet funksjon lage (array $ args) $ this-> id = array_shift ($ args); $ error = $ this-> feil ($ this-> id); $ this-> details = vsprintf ($ error ['kontekst'], $ args); returner $ this-> detaljer; privatfunksjonsfeil ($ id) $ data = ['not_found' => ['context' => 'Den forespurte ressursen ble ikke funnet, men kan være tilgjengelig igjen i fremtiden. Etterfølgende forespørsler fra klienten er tillatt. ',] // ...]; returner $ data [$ id];
Og din Unntaksklasse:
navneområde App \ Unntak; klassen NotFoundmonException utvider monException offentlig funksjon __construct () $ message = $ this-> create (func_get_args ()); forelder :: __ konstruksjon ($ melding);
Du kan bruke ovennevnte klasse i koden din:
prøv kaste nye \ App \ Unntak \ NotFoundmonException ('not_found'); fangst (\ App \ Unntak \ NotFoundmonException $ e) return $ e-> getMessage ();
Ved siden av Laravel-kjerneeksjonen kan du bruke Assertion-pakken. Dette kan brukes som en tredjeparts unntaksklasse; Du kan bruke dette til å hoppe over spaghetti hvis
blokker i koden din.
For å installere Assertion-pakken, bør du kjøre følgende kommando:
komponisten krever beberlei / assert
Hvis du for eksempel vil sjekke e-postadressen til en bruker, kan du gjøre dette:
bruk Assert \ Assertion; bruk Assert \ AssertionFailedException; // ... Prøv Assertion :: email ($ value, "Verdien må være gyldig e-postadresse"); fangst (AssertionFailedException $ e) $ e-> getValue (); // verdien som forårsaket feilen $ e-> getConstraints (); // de ytterligere begrensningene i påstanden.
Uavhengig av hvilket språk du velger å bruke, er unntak svært viktig å forstå som de hjelper oss med å kontrollere utførelsen av strømmen av en søknad.
Videre hjelper de oss med å logge på problemer når de oppstår, og bidra til å gjøre applikasjonen mer robust.
Som du kan se fra arbeidet som er omtalt i denne opplæringen, er Laravel et rammeverk som tilbyr flotte web-applikasjoner for unike håndteringsfunksjoner.