1
votes

Gestion des exceptions Laravel NotFoundHttpException

Je ne parviens pas à gérer NotFoundHttpException dans Laravel

J'ai déjà essayé de le gérer via render () dans Handler.php

// Handler.php 
// render()
==============

public function render($request, Exception $e)
    {
        if($e instanceof NotFoundHttpException){
            return response('Not Found');
        }
        return parent::render($request,$e);
   }

Il doit renvoyer la réponse "Not Found". Mais il revient

Classe 'Symfony \ Component \ HttpKernel \ Exception \ NotFoundHttpException' introuvable

Ce qui signifie que la classe NotFoundHttpException ne peut pas être trouvée dans le dossier du fournisseur, j'ai essayé de rechercher la classe dans le chemin spécifié mais je ne l'ai pas trouvée.


1 commentaires

Lors de l'ajout, utilisez Exception; quelle erreur vous obtenez?


6 Réponses :


1
votes

écrire en haut du contrôleur

use Exception; 


1 commentaires

Pouvez-vous expliquer cela davantage? Si Exception n'a pas été importé correctement, il devrait y avoir un autre message d'erreur



1
votes

Dans handler.php

<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;

class ErrorController extends Controller
{

    public function error404()
    {
        return view('error_page');
    }
    public function error500()
    {
        return view('error500_page');
    }
    public function errordefault()
    {
        return view('default_error_page');
    }
}

Et puis dans web.php vous pouvez acheminer vers votre contrôleur de choix, ici j'ai géré avec ErrorController.php auto-créé

//Error page
Route::get('errors', 'ErrorController@errordefault')->name('errordefault');
Route::get('404', 'ErrorController@error404')->name('error404');
Route::get('500', 'ErrorController@error500')->name('error500');

Rendre la fonction errordefault (), error404 () et error500 () dans ErrorController;

Dans ErrorController.php

public function render($request, Exception $exception)
    {
        if ($this->isHttpException($exception)) {
            switch ($exception->getStatusCode()) {
                case 404:
                    return redirect()->route('error404');
                    break;
                case '500':
                    return redirect()->route('error500');
                    break;
                default:
                    return redirect()->route('errordefault');
                    break;
            }
        }
        else{
            return parent::render($request,$exception);
        }
        return parent::render($request, $exception);
    }


1 commentaires

ce n'est pas le problème de la redirection, la condition if renvoie toujours false à cause de laquelle le corps de l'instruction if n'est pas exécuté dans Handler.php.



1
votes
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

1 commentaires

Pouvez-vous expliquer cela davantage? Si cette classe n'avait pas été importée, comment le message d'erreur devrait-il imprimer le FQDN?



1
votes

vous pouvez essayer ceci dans laravel

     try{
        $response= model::where('uid',$uid)->update($insertArry);
        if($response){
            $backMessage = "insert success";
            $status='success';
            return redirect()->route('website')->with($status, $backMessage);

        }else{
            $backMessage = "something wrong!";
            $status='danger';
            return redirect()->route('website')->with($status, $backMessage);
        }
    }catch (Exception $e) {
        //get exception here
        $backMessage = $e;
        $status='info';
        return redirect()->route('website')->with($status, $backMessage);
    }


0 commentaires

2
votes

Vous pouvez l'essayer comme ceci:

<?php

namespace App\Exceptions;

use Exception;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;

class Handler extends ExceptionHandler
{

    /**
     * Render an exception into an HTTP response.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Exception  $exception
     * @return \Illuminate\Http\Response
     */
    public function render($request, Exception $exception)
    {
        if ($this->isHttpException($exception)) {
            $statusCode = $exception->getStatusCode();
            switch ($statusCode) {
                case '404':
                    return response()->view('errors/404');
                case '500';
                    return response()->view('errors/500');
            }
        }
        return parent::render($request, $exception);
    }

}

Fusionnez ce code dans votre handler.php au lieu de le coller directement.


0 commentaires

0
votes

Essayez dd ($ excpetion); Parfois, une autre exception comme Illuminate \ Database \ Eloquent \ ModelNotFoundException.


0 commentaires