webentwicklung-frage-antwort-db.com.de

Laravel 4 Ausnahme: NotFoundHttpException

Die Protokolle meiner Laravel 4-Anwendung zeigen manchmal eine 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}

Was könnte das verursacht haben? Die Stack-Ablaufverfolgung zeigt nichts aus meinem Code.

12
Nyxynyx

Eine NotFoundHttpException ist im Grunde nur eine 404 in Ihrer Anwendung. Leider enthält die Ausnahmebedingungsnachricht nicht einmal die URL der Anforderung, die die Ausnahmebedingung ausgelöst hat. Daher ist es schwierig, diese Fehler zu verstehen, wenn Sie sie in Ihren Protokollen sehen.

Um weitere Debugging-Informationen zu erhalten, richten Sie Ihren eigenen 404-Handler ein. Hier ist ein einfacher Handler, der die URL protokolliert (damit Sie wissen, was zum Auslösen des Fehlers angefordert wurde) und den Benutzeragenten (damit Sie herausfinden können, wer oder was die Anfrage gemacht hat) und eine Ansicht und 404-Code zurückgeben:

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);
});

Legen Sie es in app/start/global.php.

25
Andreas

Ich habe dieses Problem erhalten, weil ich den Namen eines übergeordneten Verzeichnisses großgeschrieben hatte und es in der URL nicht groß geschrieben hatte. Deshalb habe ich den Fehler bekommen.

Ich verwendete diese URL localhost/laravel/todo2/public/foo Und es hat tatsächlich funktioniert, wenn ich nur Folgendes eingegeben habe: localhost/Laravel/todo2/public/ aber wenn ich etwas nach dem Publikum eingetippt hätte, würde es diesen Fehler geben.

wenn ich dies mit Laravel verwendet habe localhost/Laravel/todo2/public/foo  

die routen nach öffentlich/würden funktionieren

3
Mark

Sie können den Fehler 404 (NotFoundHttpException) aus Ihrer Protokolldatei filtern.
Speicherort der Datei: 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

Mein Projekt ist in C:\xampp\htdocs\ColorTex

Ich habe diesen Fehler beim Tippen erhalten 

http://localhost/myproject/public/image 

anstatt

http://localhost/MyProject/public/image 

Ich bin in Fenstern, also dachte ich, es wird die Großschreibung ignorieren, aber ...

Sei vorsichtig damit.

1
Combine

Es ist wirklich schwer zu sagen, woran es liegt, ohne dass Sie Ihren Code kennen. Wenn man sich die Stack-Ablaufverfolgung des Fehlers ansieht, ist es klar, dass der Router ihn abfertigt, und ich denke, er hat nichts mit dem Hintergrundjob selbst zu tun, sondern mit den APIs, die er aufruft.

In Ihrem speziellen Fall wird die Ausnahme nach einer ResourceNotFoundException ausgelöst. Dies geschieht, wenn für dieses URL-Muster keine Route definiert ist.

Mögliche Probleme:

Wenn der Hintergrundjob auf Ihren eigenen APIs einen file_get_contents oder eine curl ausführt, ruft er möglicherweise eine nicht vorhandene Route auf und löst dann diese Ausnahme aus.

Wenn Sie nicht die Kontrolle über die URLs haben, die der Hintergrundjob herunterlädt, versucht er möglicherweise, eine URL wie 127.0.0.1, localhost oder ähnliches abzurufen.

1
vFragosop

Ich habe diese Fehlermeldung erhalten, weil ich method = "post" in meinem Formular anstelle von method = "POST" verwendet habe. 

Könnte jemandem nützlich sein.

0
xyLuz