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.
6 Réponses :
écrire en haut du contrôleur
use Exception;
Pouvez-vous expliquer cela davantage? Si Exception
n'a pas été importé correctement, il devrait y avoir un autre message d'erreur
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); }
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.
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
Pouvez-vous expliquer cela davantage? Si cette classe n'avait pas été importée, comment le message d'erreur devrait-il imprimer le FQDN?
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); }
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.
Essayez dd ($ excpetion); Parfois, une autre exception comme Illuminate \ Database \ Eloquent \ ModelNotFoundException.
Lors de l'ajout, utilisez Exception; quelle erreur vous obtenez?