Je veux montrer la page 500 erreur de serveur interne Page. quand l'utilisateur a eu une erreur de syntaxe dans le projet quelqu'un peut-il m'aider? si je fais une erreur de syntaxe, je veux montrer cette lame en particulier.
Vous devez créer un gestionnaire pour capturer FatalErrorExceptions
dans votre gestionnaire, comme ci-dessous:
Handler In app/Exceptions/Handler.php
public function render($request, Exception $e)
{
// 404 page when a model is not found
if ($e instanceof ModelNotFoundException) {
return response()->view('errors.404', [], 404);
}
// custom error message
if ($e instanceof \ErrorException) {
return response()->view('errors.500', [], 500);
} else {
return parent::render($request, $e);
}
return parent::render($request, $e);
}
Voir Voir resources/views/errors/500.blade.php
. Si ce n'est pas le cas, créez-le.
Vous pouvez obtenir plus de détails OR par le biais de Vue d’erreur personnalisée Laravel 5 pour 500
Dans votre dossier resources/views/errors
, créez un fichier nommé 500.blade.php
.
Laravel facilite l'affichage de pages d'erreur personnalisées pour divers HTTP codes d'état. Par exemple, si vous souhaitez personnaliser la page d'erreur pour 500 codes de statut HTTP, créez un
resources/views/errors/500.blade.php
. Ce fichier sera servi sur les 500 erreurs générées par votre application.
Le problème est que Laravel ne fera que ce rendu automatique des pages d'erreur pour les exceptions qui sont des instances de HttpException
. Malheureusement, lorsque votre serveur génère une erreur (méthode inexistante, variable non définie, etc.), il génère en fait une variable FatalErrorException
. En tant que tel, il est non capturé et passe au SymfonyDisplayer()
qui vous donne la trace (debug true) ou le vilain lignage 'Whoops, on dirait que quelque chose a mal tourné' (debug false).
Pour résoudre cela, vous devez ajouter ceci à votre méthode render
à app/Exceptions/Handler
# /app/Exceptions/Handler.php
# use Symfony\Component\Debug\Exception\FlattenException;
# public function render($request, Exception $e)
$exception = FlattenException::create($e);
$statusCode = $exception->getStatusCode($exception);
if ($statusCode === 404 or $statusCode === 500) {
return response()->view('errors.' . $statusCode, [], $statusCode);
}
Ma solution est simple, il suffit de remplacer votre méthode render () dans le fichier Exceptions\Handler.php par:
/**
* 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 ($request->expectsJson()) {
return $this->renderJson($request, $exception);
}
if ($this->shouldReport($exception) && app()->environment('production')) {
$exception = new HttpException(500, $exception->getMessage(), $exception);
}
return parent::render($request, $exception);
}
Il affichera 500 pages si l'application est en environnement de production. Vous devez disposer de 500.blade.php view dans votre dossier resources/views/errors.
dans app\Exceptions\Handler, créez la méthode suivante:
protected function convertExceptionToResponse(Exception $e)
{
$e = FlattenException::create($e);
return response()->view('errors.500', ['exception' => $e], $e->getStatusCode(), $e->getHeaders());
}
il remplacera celui de la classe parent (Illuminate\Foundation\Exceptions\Handler) qui affiche la page whoops.
// app/Exceptions/Handler.php
protected function prepareResponse($request, Exception $e)
{
if($this->isHttpException($e) === false && config('app.debug') === false) {
$e = new HttpException(500);
}
return parent::prepareResponse($request, $e);
}
Comme @Amit a dit
Le problème est que Laravel ne fera que ce rendu automatique de pages d'erreur pour les exceptions qui sont des instances de HttpException.
Ma solution consiste donc à remplacer toute exception autre que HttpException par une HttpException.
Dans Laravel 5.4, vous pouvez remplacer la fonction prepareException
dans votre app\Exception\Handler.php
:
/**
* @inheridoc
*/
protected function prepareException(Exception $e)
{
$exception = parent::prepareException($e);
if(!config('app.debug')) {
if(!$exception instanceof HttpException && $this->shouldReport($exception)) {
$exception = new HttpException(500);
}
}
return $exception;
}