web-dev-qa-db-fra.com

laravel 5 custom 404

Ça me rend fou. Je travaille avec Laravel 5 et il semble que la documentation pour la version 4.2 et la génération de 404 pages ne fonctionne pas.

Tout d'abord, il n'y a pas de fichier global.php, j'ai donc essayé de mettre les éléments suivants dans routes.php:

App::missing(function($exception)
{
    return Response::view('errors.missing', array(), 404);
});

Cela entraîne une erreur "méthode manquante () non trouvée"

Le débogage est défini sur false.

J'ai cherché et cherché mais je n'ai pas trouvé d'information sur la définition de 404 pages dans Laravel 5. Nous apprécierions votre aide.

16
Cosmo Kramer

Allez dans ressources/vues/erreurs et créez un fichier 404.blade.php avec ce que vous voulez sur votre page 404 et Laravel s’occupe du reste. 

31
JNsites

si vous voulez avoir une solution globale, vous pouvez faire des changements dans /app/Exceptions/Handler.php en ajoutant du code ci-dessous

public function render($request, Exception $e)
{
    if ($this->isHttpException($e)) {

        $statusCode = $e->getStatusCode();

        switch ($statusCode) {

            case '404':
                return response()->view('layouts/index', [
                    'content' => view('errors/404')
                ]);
        }
    }
    return parent::render($request, $e);
}
9
Hayk Aghabekyan

J'aime l'approche de la déclaration de cas, mais certains problèmes sont à résoudre.

Cependant, cela intercepte toutes les erreurs:

Route::any('/{page?}',function(){
  return View::make('errors.404');
})->where('page','.*');
2
jeremykenedy

Laravel 5 a déjà une méthode de rendu prédéfinie (ligne 43) sous app/Exceptions/Handler.php. Insérez simplement le code de redirection avant parent :: render. Ainsi,

public function render($request, Exception $e)
{
    if ($e instanceof ModelNotFoundException) 
    {
        $e = new NotFoundHttpException($e->getMessage(), $e);
    }

    //insert this snippet
    if ($this->isHttpException($e)) 
    {
        $statusCode = $e->getStatusCode();
        switch ($statusCode) 
        {
            case '404': return response()->view('error', array(), 404);
        }
    }

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

Remarque: Mon vue est sous ressources/vues. Vous pouvez en quelque sorte le mettre où vous voulez.

2
Kent Aguilar

Dans Laravel 5, vous pouvez simplement mettre un 404.blade.php sous ressources/vues/erreurs et c’est tout. Pour d’autres erreurs comme 500, vous pouvez essayer ce qui suit dans votre app/Exeptions/Handler.php :

public function render($request, Exception $e)
{

    if ( ! config('app.debug') && ! $this->isHttpException($e)) {
        return response()->view('errors.500');
    }

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

Et faites de même pour 500 exeptions HTTP

1
Mithredate