Afficher une page 404 si la route ne se trouve pas dans Laravel 5.1

j'essaie de comprendre pour montrer la page 404 pas trouvé si un itinéraire n'est pas trouvé. J'ai suivi beaucoup de tutoriels, mais ça ne marche pas. J'ai 404.blade.phplaravelresourcesviewserrors

également en handler.php

public function render($request, Exception $e)
{
    if ($e instanceof TokenMismatchException) {
        // redirect to form an example of how i handle mine
        return redirect($request->fullUrl())->with(
            'csrf_error',
            "Opps! Seems you couldn't submit form for a longtime. Please try again"
        );
    }

    /*if ($e instanceof CustomException) {
        return response()->view('errors.404', [], 500);
    }*/

    if ($e instanceof SymfonyComponentHttpKernelExceptionNotFoundHttpException)
        return response(view('error.404'), 404);

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

si j'entre la mauvaise URL dans le navigateur, il retourne une page vierge. J'ai

'debug' => env('APP_DEBUG', true),

dans l'app.php.

Est-ce que quelqu'un peut m'aider à montrer une page 404 si route n'est pas trouvé? Remercier.

17
demandé sur vision 2015-08-25 07:06:36

6 réponses

j'ai reçu 500 erreurs au lieu de 404 erreurs. J'ai résolu le problème comme ceci:

dans l'application / Exceptions / Handler.fichier php, il y a un rendu fonction.

Remplacer la fonction avec cette fonction:

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

            // not authorized
            case '403':
                return \Response::view('errors.403',array(),403);
                break;

            // not found
            case '404':
                return \Response::view('errors.404',array(),404);
                break;

            // internal error
            case '500':
                return \Response::view('errors.500',array(),500);
                break;

            default:
                return $this->renderHttpException($e);
                break;
        }
    } else {
        return parent::render($request, $e);
    }
}

Vous pouvez alors utiliser des vues que vous sauvegardez dans views/errors/404.lame.php, et ainsi de suite.

19
répondu Pim 2017-05-20 16:44:15

@testeur.Votre problème a déjà été résolu, essayez la commande ci-dessous dans compositeur:

php artisan view:clear

puis réessayez avec une URL inconnue. Parce que j'ai aussi été confronté au même erreur avant.

5
répondu M'Baku 2018-01-25 06:47:10

enter image description here> La méthode abort immédiatement déclencher une exception qui sera rendu par le gestionnaire d'exception. Vous pouvez aussi fournir le texte de la réponse:

abort(403, 'Unauthorized action.');

est-ce que votre app_debug est réglé sur true? si C'est le cas, Laravel lancera l'erreur avec backtrace pour les besoins du débogage, si vous changez la valeur en false, Laravel affichera la page 404 par défaut dans le dossier errors. Cela étant dit, vous pouvez choisir d'utiliser interrompre à tout moment, vous vouloir. au niveau du contrôleur ou au niveau de la route, il est totalement à vous.

ie

Route::get('/page/not/found',function($closure){
  // second parameter is optional. 
  abort(404,'Page not found');
  abort(403); 
});
3
répondu mdamia 2015-08-25 04:44:08

Vous n'avez pas besoin de vérifier le type d'erreur et de rendre manuellement la vue 404. Laravel sait déjà à rendre la vue avec le code d'erreur HTTP jetée (404 = ressources/vues/erreurs/404.lame.php). Débarrassez-vous du chèque en trop et ça devrait marcher.

public function render($request, Exception $e)
{
    if ($e instanceof TokenMismatchException) {
        // redirect to form an example of how i handle mine
        return redirect($request->fullUrl())->with(
            'csrf_error',
            "Opps! Seems you couldn't submit form for a longtime. Please try again"
        );
    }

    return parent::render($request, $e);
}
1
répondu patricus 2015-08-25 05:03:25

j'utilise ce qui suit dans app/Exceptions/Handler.php (Laravel 5.2):

/**
 * 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 ($e instanceof \ReflectionException OR $e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) //Si la ruta no existe, mostar view 404.
        return response(view('errors.404'), 404);
    return parent::render($request, $e);
}

Et il ressemble à ceci: img

1
répondu Shinseiki86 2017-01-22 17:24:58

dans apache, vous pouvez mettre ce code .htaccess file à votre répertoire principal et assurez-vous que la modification de la Directive AllowOverride à tous dans le fichier confg httpd

ErrorDocument 404 the\path\to4.blade.php
0
répondu Mohammed Elhag 2015-08-25 05:09:29