Dans Laravel 5, App::missing
et App::error
_ n'est pas disponible. Comment vos exceptions de capture et les pages manquantes maintenant?
Je n'ai trouvé aucune information à ce sujet dans la documentation.
Dans Laravel 5, vous pouvez intercepter des exceptions en modifiant la méthode render
dans app/Exceptions/Handler.php
.
Si vous voulez récupérer une page manquante (également appelée NotFoundException
), vous devez vérifier si l'exception, $e
, est une instance de Symfony\Component\HttpKernel\Exception\NotFoundHttpException
.
public function render($request, Exception $e) {
if ($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException)
return response(view('error.404'), 404);
return parent::render($request, $e);
}
Avec le code ci-dessus, nous vérifions si $e
est un instanceof
de Symfony\Component\HttpKernel\Exception\NotFoundHttpException
et si c'est le cas, nous envoyons un response
avec le fichier viewerror.404
en tant que contenu avec le code de statut HTTP 404 .
Ceci peut être utilisé pour N'IMPORTE QUELLE exception. Donc, si votre application envoie une exception de App\Exceptions\MyOwnException
, vous recherchez plutôt cette instance.
public function render($request, Exception $e) {
if ($e instanceof \App\Exceptions\MyOwnException)
return ''; // Do something if this exception is thrown here.
if ($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException)
return response(view('error.404'), 404);
return parent::render($request, $e);
}
Avec commit à partir d’aujourd’hui (9db97c3), il vous suffit d’ajouter un fichier 404.blade.php dans le dossier/resources/views/errors/pour le rechercher et l’afficher automatiquement.
Depuis les validations 681dc et 9acf685 , la méthode missing()
a été déplacée vers la méthode Illuminate\Exception\Handler
classe.
Donc, pendant un certain temps, vous pourriez faire ceci:
app('exception')->missing(function($exception)
{
return Response::view('errors.missing', [], 404);
});
... Mais récemment, une refactorisation a été effectuée à 62ae86 .
Maintenant, ce que vous pouvez faire est d’ajouter ce qui suit à app/Http/Kernel.php
:
// add this...
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use Response;
class Kernel extends HttpKernel {
(...)
public function handle($request)
{
try
{
return parent::handle($request);
}
// ... and this:
catch (NotFoundHttpException $e)
{
return Response::view('errors.missing', [], 404);
}
catch (Exception $e)
{
throw $e;
}
}
Enfin, gardez à l’esprit Laravel est encore en pleine phase de développement et les modifications risquent de se reproduire.
Si vous souhaitez conserver le gestionnaire dans votre fichier de routes Web, après vos routes existantes:
Route::any( '{all}', function ( $missingRoute) {
// $missingRoute
} )->where('all', '(.*)');
Le mode HTML5 angulaire peut être à l'origine de nombreuses pages manquantes (l'utilisateur marque quelques pages et tente de recharger). Si vous ne pouvez pas remplacer les paramètres du serveur pour gérer cela, vous pouvez penser à remplacer le comportement de la page manquante.
Vous pouvez modifier la méthode de rendu\App\Exceptions\Handler en un contenu Push avec 200 plutôt qu'un modèle Push 404 avec un code 404.
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $e
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $e)
{
if ($this->isHttpException($e) && $e->getStatusCode() == 404)
{
return response()->view('angular', []);
}
return parent::render($request, $e);
}
Laravel est livré avec une page d'erreur par défaut, vous pouvez facilement ajouter des pages d'erreur personnalisées comme celle-ci
1 - Créer une vue d'erreur dans la vue -> dossier des erreurs
2 - Le nom doit correspondre aux erreurs HTTP telles que 404 ou 403 500
`Route::get('/page/not/found',function($closure){
// second param is optional
abort(404, 'Page Not found');
});`
En ajoutant le code suivant
protected $dontReport = [
'Symfony\Component\HttpKernel\Exception\HttpException'
];
et
public function render($request, Exception $e)
{
return redirect('/');
//return parent::render($request, $e);
}
fonctionnera correctement pour moi