web-dev-qa-db-fra.com

Laravel 4 Exception: NotFoundHttpException

Les journaux de mon Laravel 4 application affichent parfois un NotFoundHttpException:

exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' in /var/www/laravel4/bootstrap/compiled.php:7420
Stack trace:
#0 /var/www/laravel4/bootstrap/compiled.php(7137): Illuminate\Routing\Router->handleRoutingException(Object(Symfony\Component\Routing\Exception\ResourceNotFoundException))
#1 /var/www/laravel4/bootstrap/compiled.php(7113): Illuminate\Routing\Router->findRoute(Object(Illuminate\Http\Request))
#2 /var/www/laravel4/bootstrap/compiled.php(958): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#3 /var/www/laravel4/bootstrap/compiled.php(946): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request))
#4 /var/www/laravel4/public/index.php(49): Illuminate\Foundation\Application->run()
#5 {main}

Qu'est-ce qui aurait pu causer ça? La trace de la pile ne montre rien de mon code.

12
Nyxynyx

Une NotFoundHttpException est fondamentalement juste un 404 dans votre application. Malheureusement, le message d'exception ne vous indique même pas l'URL de la demande qui a déclenché l'exception, ce qui rend difficile la compréhension de ces erreurs lorsque vous les voyez dans vos journaux.

Pour vous donner plus d’informations de débogage, configurez votre propre gestionnaire 404. Voici un gestionnaire simple qui enregistre l'URL (pour que vous sachiez ce qui a été demandé pour déclencher l'erreur) et l'agent utilisateur (pour vous aider à comprendre qui ou quoi a fait la demande) et renvoie une vue et un code 404:

App::missing(function($e) {
    $url = Request::fullUrl();
    $userAgent = Request::header('user-agent');
    Log::warning("404 for URL: $url requested by user agent: $userAgent");
    return Response::view('errors.not-found', array(), 404);
});

Mettez-le dans app/start/global.php.

25
Andreas

J'ai eu ce problème parce que j'avais mis le nom d'un répertoire parent en majuscule et que je ne l'avais pas mis en majuscule dans l'URL. C'est pourquoi j'ai eu l'erreur.

J'utilisais cette URL localhost/laravel/todo2/public/foo Et en fait, cela fonctionnait si tout ce que je tapais était: localhost/Laravel/todo2/public/ mais si je tapais quelque chose après le public/cela donnerait cette erreur.

si j'ai utilisé cela avec Laravel en majuscule localhost/Laravel/todo2/public/foo  

les itinéraires après public/travailleraient

3
Mark

Vous pouvez filtrer les erreurs 404 (NotFoundHttpException) de votre fichier journal.
Emplacement du fichier: app/start/global.php

App::error(function(Exception $exception, $errorCode)
{
    $requestUrl = Request::fullUrl(); 
    $userAgent = Request::header('user-agent');

    if($errorCode != 404){
        Log::error('Exception', array(
            'errorCode' => $errorCode,
            'requestUrl' => $requestUrl,
            'userAgent' => $userAgent,
            'context' => $exception,
        ));     
    }

    return Response::view('error-page-path.error-404', array(), 404);
    // Here "error-404" is a blade view file in "error-page-path" directory
});
1
Shojib Flamon

Mon projet est dans C:\xampp\htdocs\ColorTex

J'ai eu cette erreur en tapant 

http://localhost/myproject/public/image 

au lieu de

http://localhost/MyProject/public/image 

Je suis dans Windows, alors je pensais que ça ignorerait la capitalisation, mais ...

Sois prudent avec ça.

1
Combine

Il est très difficile de dire avec certitude la cause de ceci sans connaître votre code. En regardant la trace de la pile de l'erreur, il est clair que le routeur l'envoie et je suppose que cela n'a rien à voir avec le travail en arrière-plan, mais plutôt avec l'API qu'elle appelle.

Dans votre cas spécifique, l'exception est levée après une ResourceNotFoundException , ce qui se produit lorsqu'il n'y a pas de route définie pour ce type d'URL.

Problèmes possibles:

Si le travail en arrière-plan utilise file_get_contents ou curl sur vos propres API, il se peut qu'il appelle une route inexistante, puis lève cette exception.

Si vous ne maîtrisez pas l'URL du téléchargement du travail en tâche de fond, il est peut-être en train de récupérer une URL telle que 127.0.0.1, localhost ou quelque chose du genre.

1
vFragosop

J'ai eu cette erreur parce que j'ai utilisé method = "post" dans mon formulaire au lieu de method = "POST". 

Pourrait être utile à quelqu'un.

0
xyLuz