2014-10-15 17 views
11

Das macht mich verrückt. Ich arbeite mit Laravel 5 und es scheint, dass die Dokumentation für 4.2 und Generieren von 404 Seiten nicht funktioniert.laravel 5 custom 404

Erstens gibt es keinen global.php so habe ich versucht, im Anschluss an dem in routes.php setzen:

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

Dies zu einem Fehler führt "Verfahren fehlt() nicht gefunden"

Debug gesetzt zu falsch.

Ich habe gesucht und gesucht, aber bis jetzt keine Informationen über die Einstellung 404 Seiten in Laravel 5 gefunden. Würde mich über jede Hilfe freuen.

+1

Dank eines anderen Benutzers fand ich die Lösung. Das Hinzufügen von $ handler-> missing() zu ErrorServiceProvider führt den Trick aus. Hoffe, das hilft anderen in der Zukunft. –

+2

Bitte posten Sie das als Antwort auf Ihre Frage. –

+3

duplizieren: http://stackoverflow.com/questions/26630985/how-do-i-catch-exceptions-missing-pages-in-laravel-5 –

Antwort

21

Gehen Sie zu Ressourcen/Ansichten/Fehler und erstellen Sie eine 404.blade.php-Datei mit dem, was Sie wollen auf Ihrer 404-Seite und Laravel kümmert sich um den Rest.

+2

dies wird funktionieren, aber das ist nicht etwas völlig von Entwickler gesteuert, als Sie können Ihre Fehleransicht nicht in Ihrem Layout verwenden. Du kannst meine Antwort sehen. –

+4

Wow, eine solche Werbung @HaykAghabekyan – ozanmuyes

+0

@HaykAghabekyan, Ihre Antworten sind nicht angemessen, weil Sie Core-Dateien bearbeiten. Diese Antwort ist korrekt, da Sie die Fehleransicht innerhalb des Layouts mit dem Tag '@eends()' verwenden können. – manix

8

wenn Sie wollen eine globale Lösung haben, können Sie durch Hinzufügen von Code unten

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

Das ist die richtige Antwort. Wenn Sie Twig oder eine andere Templat-Engine als Blade verwenden, können Sie diese wie eine normale Ansicht laden. Obwohl ich fragen muss, was ist "Layouts/Index"? Ich nannte beide zu "errors.404" und es funktionierte. – enchance

+0

layouts ist mein Ordner, in dem Hauptvorlagendateien gespeichert sind, z. B. der Index, der meine Standardvorlagendatei ist. –

+0

ja, stimmte zu, dass dies richtig ist. – heisian

1

Ich mag die Case-Anweisung Ansatz in /app/Exceptions/Handler.php Änderungen tun, aber es hat einige Probleme gehen Ebenen tief.

jedoch fängt das alle Fehler:

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

In Laravel 5 Sie einfach eine benutzerdefinierte 404.blade.php unter Ressourcen/views/Fehler setzen könnte und das ist es. Für andere Fehler wie 500 könnten Sie die folgenden in Ihrem app versuchen/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); 
} 

Und das gleiche für 500 HTTP Exeptions

1

Laravel 5 hat bereits eine vordefinierte machen Methode (Zeile 43) unter app/Exceptions/Handler.php. Fügen Sie den Umleitungscode einfach vor parent :: render ein. Wie so,

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

Hinweis: Meine Ansicht ist unter Ressourcen/Ansichten. Du kannst es irgendwo anders hinstellen, wo du willst.