Wat zijn Laravel-uitzonderingen?

Als een PHP-ontwikkelaar, kunt u uitzonderingen gebruiken, omdat ze u in staat stellen op te merken wanneer iets verkeerd is gegaan of de gebruiker op een ongebruikelijke manier heeft gehandeld (zoals delen door nul). Zonder uitzonderingen zou uw applicatie ongewenste fouten opleveren en veel moeilijker te debuggen zijn. Het is ook belangrijk dat u de uitvoering onmiddellijk stopzet en een andere actie onderneemt.

Uitzonderingen zijn heel eenvoudig en ze zullen uw ontwikkeling gemakkelijker maken. Wanneer u leert uitzonderingen te gebruiken, zal dit een gebruikelijk onderdeel van uw ontwikkeling zijn.

Wat is een uitzondering?

Ik denk dat Martin Fowler de beste definitie voor uitzonderingen geeft:

Uitzonderingen signaleren iets buiten de verwachte grenzen van het gedrag van de betreffende code.

Precies, in feite is een uitzondering een gebeurtenis, die optreedt tijdens de uitvoering van een programma, die de normale stroom van de instructies van het programma verstoort. Wanneer je gooien (maak een uitzondering object en overhandig het aan het runtime-systeem) een uitzondering, het systeem zal vangst door naar de juiste handler te zoeken en het juiste bericht terug te sturen.

probeer // de code gaat hier catch (uitzondering $ e) // als er een uitzondering is opgetreden in het try-blok hierboven 

Wanneer hebben we uitzonderingen nodig??

Gebruik uitzonderingen wanneer uw systeem wordt geconfronteerd met uitzonderlijke omstandigheden die voorkomen dat het systeem het overneemt. We gebruiken uitzonderingen alleen als het systeem niet in staat is om te bepalen wat er is gebeurd. Martin Fowler is van mening dat "als een fout gedrag wordt verwacht, je geen uitzonderingen zou moeten gebruiken". Dit betekent dat u uitzonderingen moet gebruiken waar u de fout niet kunt vaststellen. Uitzonderingen mogen alleen in uitzonderlijke omstandigheden worden gebruikt.

Opmerking: uitzonderingen zijn niet goed voor het afhandelen van logische bewerkingen.

Voor een systeem zoals het valideren van invoer, is het gebruik van uitzonderingen fout. Allereerst zal de invoertekst worden bepaald en in een dergelijke toepassing moeten we een verzameling fouten rapporteren in plaats van een enkele fout. Ik geloof in het elimineren van het gebruik van uitzonderingen in alle omstandigheden waarin we validatiefouten zouden kunnen verwachten.

Het vangen van een uitzondering is erg belangrijk, want als u geen uitzondering opmerkt, retourneert het systeem een ​​fout. De vangoperatie moet zo dicht mogelijk bij het mislukken liggen.

Wat zijn uitzonderingen Laravel?

Laravel gebruikt uitzondering Handler, wat een klasse is in App \ Uitzonderingen \ Handler.php. Deze klasse bevat twee hoofdmethoden (de renderHttpException methode, die wordt gebruikt voor alle HTTP-uitzonderingen, zoals 404s en 503s, bevindt zich in de bovenliggende klasse van Handler). De eerste is verslag doen van, die wordt gebruikt om uitzonderingen te loggen of ze naar een externe service te sturen. Hier is een voorbeeld van de rapportmethode:

 public function report (Exception $ e) if ($ e instanceof CustomException) // return parent :: report ($ e);  

De tweede is geven. De weergavenmethode is verantwoordelijk voor het converteren van een bepaalde uitzondering in een HTTP-reactie die teruggestuurd moet worden naar de browser. Hier is een voorbeeld van de weergavemethode:

public function render ($ request, Exception $ e) if ($ e instanceof CustomException) return response () -> view ('errors.custom', [], 500);  return parent :: render ($ request, $ e);  

Opmerking: u kunt de $ dontReport eigenschap van de uitzonderingsbehandelaar om uitzonderingen per type te negeren.

U kunt Laravel-uitzonderingsmethoden in uw eigen uitzondering overschrijven, zoals:

publieke functie render ($ request, Exception $ e) if (config ('app.debug')) return parent :: render ($ request, $ e);  return $ this-> handle ($ request, $ e);  

Dit wordt weergegeven als config debug waar is.

Hoe u uw eigen Laravel-uitzondering kunt maken?

Mogelijk moet u uw eigen uitzonderingsklasse maken. Je moet uitbreiden van de Laravel base Exception class - ik heb een abstracte klasse gemaakt die zich zal gedragen als de basisklasse van onze aangepaste Exception-klasse. Maak een bestand in App / Uitzonderingen / monException.php:

naamruimte App \ Uitzonderingen; gebruik Uitzondering; abstracte klasse monException extends Exception protected $ id; beschermde $ details; publieke functie __construct ($ message) parent :: __ construct ($ message);  beschermde functie maken (array $ args) $ this-> id = array_shift ($ args); $ error = $ this-> errors ($ this-> id); $ this-> details = vsprintf ($ error ['context'], $ args); return $ this-> details;  persoonlijke functie fouten ($ id) $ data = ['not_found' => ['context' => 'De gevraagde bron kon niet worden gevonden maar is mogelijk in de toekomst weer beschikbaar. Daaropvolgende verzoeken van de klant zijn toegestaan. ',] // ...]; return $ data [$ id];  

En uw uitzonderingsklasse:

naamruimte App \ Uitzonderingen; class NotFoundmonException breidt monException uit public function __construct () $ message = $ this-> create (func_get_args ()); ouder :: __ construct ($ message);  

U kunt de bovenstaande klasse gebruiken in uw code:

 probeer gooi nieuwe \ App \ Exceptions \ NotFoundmonException ('not_found');  catch (\ App \ Exceptions \ NotFoundmonException $ e) return $ e-> getMessage ();  

Naast de Laravel core Exception-klasse, kunt u het Assertion-pakket gebruiken. Dit kan worden gebruikt als een uitzonderingsklasse van derden; u kunt dit gebruiken om spaghetti over te slaan als blokkeert uw code.

Om het Assertion-pakket te installeren, voert u de volgende opdracht uit:

componist vereist beberlei / assert 

Als u bijvoorbeeld het e-mailadres van een gebruiker wilt controleren, kunt u dit doen:

gebruik Assert \ Assertion; gebruik Assert \ AssertionFailedException; // ... probeer Assertion :: email ($ value, "De waarde moet een geldig e-mailadres zijn");  catch (AssertionFailedException $ e) $ e-> getValue (); // de waarde die de fout $ e-> getConstraints () veroorzaakte; // de extra beperkingen van de bewering.  

Conclusie

Ongeacht de taal die u kiest om te gebruiken, uitzonderingen zijn erg belangrijk om te begrijpen omdat ze ons helpen om de uitvoering van de stroom van een applicatie te beheersen.

Bovendien helpen ze ons problemen op te sporen wanneer ze zich voordoen en helpen we onze applicatie robuuster te maken.

Zoals je kunt zien aan de hand van het werk in deze tutorial, is Laravel een raamwerk dat geweldige functionaliteit voor het afhandelen van uitzonderingen biedt, webbuilding webapplicaties.