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.php
laravelresourcesviewserrors
é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.
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.
@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.
> 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);
});
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);
}
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
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