Som PHP-utvecklare kan du använda undantag, eftersom de tillåter dig att märka när något har gått fel eller användaren har agerat på ett ovanligt sätt (till exempel uppdelning av noll). Utan undantag skulle din ansökan kunna visa oönskade fel och vara mycket svårare att felsöka. Det är också viktigt att du stannar omedelbart och utför en annan åtgärd.
Undantag är verkligen enkla, och de kommer att göra din utveckling framsteg enklare. När du lär dig hur man använder undantag kommer det att vara en vanlig del av din utveckling.
Jag tror att den bästa definitionen för undantag ges av Martin Fowler:
Undantag signalerar något utanför de förväntade gränserna för beteendet hos koden i fråga.
Exakt, ett undantag är faktiskt en händelse som uppstår under genomförandet av ett program, som stör det normala flödet av programmets instruktioner. När du kasta
(skapa ett undantag objekt och lämna det till runtime-systemet) ett undantag, systemet kommer fånga
det genom att söka efter lämplig hanterare och returnera det korrekta meddelandet.
försök // koden går här fångst (Undantag $ e) // om ett undantag hände i försöksblocket ovan
Använd undantag när ditt system står inför exceptionella omständigheter som förhindrar att systemet tar över. Vi använder endast undantag när systemet inte kan avgöra vad som har hänt. Martin Fowler tror att "om ett misslyckande är förväntat beteende, då ska du inte använda undantag". Det betyder att du ska använda undantag där du inte kan bestämma felet. Undantag bör endast användas under exceptionella omständigheter.
Obs! Undantag är inte bra för hantering av logiska operationer.
För ett system som valideringsingång är det med undantag fel. Först av allt kommer inmatningstexten att bestämmas, och i en applikation som denna ska vi rapportera en samling fel istället för ett enda fel. Jag tror på att eliminera användningen av undantag under alla omständigheter där vi kan förvänta oss valideringsfel.
Att fånga ett undantag är mycket viktigt, för om du inte får ett undantag kommer systemet att returnera ett fel. Fångstoperationen måste vara så nära misslyckan som möjligt.
Laravel använder undantagshanterare, vilken är en klass i App \ Undantag \ Handler.php
. Denna klass innehåller två huvudmetoder (the renderHttpException
Metoden, som används för alla HTTP-undantag, som 404s och 503s, finns i moderklassen av Handler). Den första är Rapportera
, som används för att logga undantag eller skicka dem till en extern tjänst. Här är ett exempel på rapportmetoden:
offentlig funktion rapport (Undantag $ e) om ($ e instanceof CustomException) // returnera förälder :: rapport ($ e);
Den andra är göra
. Återställningsmetoden är ansvarig för att konvertera ett givet undantag till ett HTTP-svar som ska skickas tillbaka till webbläsaren. Här är ett exempel på renderingsmetoden:
public function render ($ request, Exception $ e) if ($ e instanceof CustomException) return response () -> view ('errors.custom', [], 500); returnera förälder :: render ($ request, $ e);
Obs! Du kan använda $ dontReport
egenskapen för undantagshanteraren att ignorera undantag efter typ.
Du kan överväga Laravel-undantagsmetoder i ditt eget undantag som så:
public function render ($ request, Undantag $ e) if (config ('app.debug')) return parent :: render ($ request, $ e); returnera $ this-> handle ($ request, $ e);
Detta kommer att göras när konfigurationsfelsökning är sant.
Du kan behöva skapa din egen undantagsklass. Du måste sträcka sig från Laravelbasen Undantagsklass-Jag har skapat en abstrakt klass som ska bete sig som basklassen i vår egen Exception-klass. Skapa en fil i App / Undantag / monException.php
:
namnutrymme App \ Undantag; använd undantag abstrakt klass monException utökar undantag skyddad $ id; skyddade $ detaljer; allmän funktion __construct ($ message) parent :: __ construct ($ message); skyddad funktion skapa (array $ args) $ this-> id = array_shift ($ args); $ error = $ this-> errors ($ this-> id); $ this-> detaljer = vsprintf ($ error ['context'], $ args); returnera $ this-> detaljer; privata funktionsfel ($ id) $ data = ['not_found' => ['context' => 'Den begärda resursen kunde inte hittas men kan vara tillgänglig igen i framtiden. Efterföljande förfrågningar från klienten är tillåtna. ',] // ...]; returnera $ data [$ id];
Och din Exception klass:
namnutrymme App \ Undantag; klass NotFoundmonException utökar monException public function __construct () $ message = $ this-> skapa (func_get_args ()); förälder :: __ konstruktion ($ message);
Du kan använda ovanstående klass i din kod:
försök kasta nya \ App \ Undantag \ NotFoundmonException ('not_found'); fånga (\ App \ Undantag \ NotFoundmonException $ e) returnera $ e-> getMessage ();
Förutom Laravel-kärnans undantagsklass kan du använda Assertion-paketet. Detta kan användas som en undantagsklass för tredje part; du kan använda detta för att hoppa över spagetti om
block i din kod.
För att installera Assertion-paketet, bör du köra följande kommando:
kompositören kräver beberlei / assert
Om du till exempel vill kontrollera e-postadressen till en användare kan du göra det här:
använd Assert \ Assertion; använd Assert \ AssertionFailedException; // ... försök Assertion :: email ($ value, "Värdet måste vara giltig e-postadress"); fånga (AssertionFailedException $ e) $ e-> getValue (); // det värde som orsakade misslyckandet $ e-> getConstraints (); // de ytterligare begränsningarna av påståendet.
Oavsett vilket språk du väljer att använda är undantag mycket viktiga att förstå eftersom de hjälper oss att kontrollera genomförandet av flödet av en ansökan.
Dessutom hjälper de oss att logga in problem när de uppstår och bidra till att göra vår ansökan mer robust.
Som du kan se från det arbete som omfattas av denna handledning, är Laravel ett ramverk som erbjuder fantastiska exceptionella hanteringsfunktioner webbbyggnad webbapplikationer.