Recherche…


Remarques

N'oubliez pas de configurer votre application pour l'envoi par courrier électronique en veillant à configurer correctement config/mail.php

Vérifiez également que les variables ENV sont correctement définies.

Cet exemple est un guide et est minime. Explorer, modifier et styliser la vue comme vous le souhaitez. Ajustez le code pour répondre à vos besoins. Par exemple, définissez le destinataire dans votre fichier .env

Envoyer un rapport d'erreur par e-mail

Les exceptions dans Laravel sont gérées par App \ Exceptions \ Handler.php

Ce fichier contient deux fonctions par défaut. Rapport et rendu. Nous n'utiliserons que le premier

 public function report(Exception $e)

La méthode de rapport est utilisée pour enregistrer des exceptions ou les envoyer à un service externe tel que BugSnag. Par défaut, la méthode de rapport transmet simplement l'exception à la classe de base où l'exception est consignée. Cependant, vous êtes libre de consigner les exceptions comme vous le souhaitez.

Essentiellement, cette fonction ne fait que renvoyer l'erreur et ne fait rien. Par conséquent, nous pouvons insérer une logique métier pour effectuer des opérations en fonction de l'erreur. Pour cet exemple, nous enverrons un courrier électronique contenant les informations d'erreur.

public function report(Exception $e)
{
    if ($e instanceof \Exception) {
        // Fetch the error information we would like to 
        // send to the view for emailing
        $error['file']    = $e->getFile();
        $error['code']    = $e->getCode();
        $error['line']    = $e->getLine();
        $error['message'] = $e->getMessage();
        $error['trace']   = $e->getTrace();

        // Only send email reports on production server
        if(ENV('APP_ENV') == "production"){
            #1. Queue email for sending on "exceptions_emails" queue
            #2. Use the emails.exception_notif view shown below
            #3. Pass the error array to the view as variable $e
            Mail::queueOn('exception_emails', 'emails.exception_notif', ["e" => $error], function ($m) {
                $m->subject("Laravel Error");
                $m->from(ENV("MAIL_FROM"), ENV("MAIL_NAME"));
                $m->to("[email protected]", "Webmaster");
            });

        }
    }

    // Pass the error on to continue processing
    return parent::report($e);
}

La vue de l'email ("emails.exception_notif") est ci-dessous

<?php 
$action = (\Route::getCurrentRoute()) ? \Route::getCurrentRoute()->getActionName() : "n/a";
$path = (\Route::getCurrentRoute()) ? \Route::getCurrentRoute()->getPath() : "n/a";
$user = (\Auth::check()) ? \Auth::user()->name : 'no login';
?>

There was an error in your Laravel App<br />

<hr />
<table border="1" width="100%">
    <tr><th >User:</th><td>{{ $user }}</td></tr>
    <tr><th >Message:</th><td>{{ $e['message'] }}</td></tr>
    <tr><th >Action:</th><td>{{ $action }}</td></tr>
    <tr><th >URI:</th><td>{{ $path }}</td></tr>
    <tr><th >Line:</th><td>{{ $e['line'] }}</td></tr>
    <tr><th >Code:</th><td>{{ $e['code'] }}</td></tr>
</table>

Récupération de l'application ModelNotFoundException à l'échelle de l'application

app \ Exceptions \ Handler.php

public function render($request, Exception $exception)
{
    if ($exception instanceof ModelNotFoundException) {
        abort(404);
    }

    return parent::render($request, $exception);
}

Vous pouvez attraper / gérer toute exception qui est lancée dans Laravel.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow