2013-12-09 23 views
7

Ich möchte festlegen, dass, wenn etwas in der URL-Adresse anders als die bestehenden Routen (in routes.php eingegeben, dann 404 Seite zeigenLaravel Routing und 404 Fehler

Ich weiß dazu:.

App::abort(404); 
?

aber wie kann ich das Teil angeben, wo alles andere außer den Routen definiert

Antwort

29

Sie können diese Datei auf Ihrem filters.php hinzufügen:

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

Und erstellen Sie die errors.missing Ansichtsdatei, um ihnen den Fehler anzuzeigen.

Werfen Sie auch einen Blick auf die Errors & Logging docs

EDIT

Wenn Sie Daten zu dieser Ansicht übergeben müssen, der zweite Parameter ist ein Array Sie verwenden können:

App::missing(function($exception) 
{ 
    return Response::view('errors.missing', array('url' => Request::url()), 404); 
}); 
+0

Wie kann ich Request: url() an missign Blade übergeben. – alayli

+0

Bearbeitet, um Ihre Frage zu beantworten. –

+0

Hallo ... ist es möglich, die vorherige URL zum Hinzufügen eines Links in der 404-Seite wie "Gehe zur vorherigen Seite"? – SoldierCorp

5

I würde raten, dies in Ihre app/start/global.php als das ist wo Laravel behandelt es standardmäßig (obwohl filters.php wird auch funktionieren). Normalerweise verwende ich so etwas wie diese:

/* 
|-------------------------------------------------------------------------- 
| Application Error Handler 
|-------------------------------------------------------------------------- 
| 
| Here you may handle any errors that occur in your application, including 
| logging them or displaying custom views for specific errors. You may 
| even register several error handlers to handle different types of 
| exceptions. If nothing is returned, the default error view is 
| shown, which includes a detailed stack trace during debug. 
| 
*/ 

App::error(function(Exception $exception, $code) 
{ 
    $pathInfo = Request::getPathInfo(); 
    $message = $exception->getMessage() ?: 'Exception'; 
    Log::error("$code - $message @ $pathInfo\r\n$exception"); 

    if (Config::get('app.debug')) { 
     return; 
    } 

    switch ($code) 
    { 
     case 403: 
      return Response::view('errors/403', array(), 403); 

     case 500: 
      return Response::view('errors/500', array(), 500); 

     default: 
      return Response::view('errors/404', array(), $code); 
    } 
}); 

Dann gerade einen errors Ordner in /views machen und Ihre Fehlerseite Inhalt dort platzieren. Wie Antonio erwähnt, können Sie Daten innerhalb der array() übergeben.

Ich lieh mir freundlicherweise diese Methode von https://github.com/andrewelkins/Laravel-4-Bootstrap-Starter-Site

+0

benutze 'Laravel 5.2' und' app/start/global.php' ist nicht verfügbar. Können Sie mir vorschlagen, was ich tun soll? – Pankaj

0

Das ist mein Ansatz ist es, die Fehler 404 mit einem Template-Layout nur für die Anzeige. Fügen Sie einfach den folgenden Code /app/start/global.php Datei

App::missing(function($exception) 
{ 
    $layout = \View::make('layouts.error'); 
    $layout->content = \View::make('views.errors.404'); 
    return Response::make($layout, 404); 
}); 
1

nur für Jungs mit Laravel 5, es ist ein Fehler in den Ansichten Verzeichnis Ordner in. Sie müssen nur eine 404.blade.php-Datei dort erstellen und es wird diese Ansicht rendern, wenn keine Route für eine URL angegeben ist