2014-10-15 2 views
11

Questo mi sta facendo impazzire. Sto lavorando con Laravel 5 e sembra che i documenti per la 4.2 e la generazione di 404 pagine non funzionino.laravel 5 custom 404

Innanzitutto, non c'è global.php così provai mettendo quanto segue in routes.php:

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

Ciò genera un errore "metodo mancanti() non trovato"

debug è impostato a falso.

Ho cercato e cercato ma finora non ho trovato alcuna informazione sull'impostazione di 404 pagine in Laravel 5. Gradirei qualsiasi aiuto.

+1

Grazie a un altro utente, ho trovato la soluzione. Aggiungere $ handler-> missing() a ErrorServiceProvider fa il trucco. Spero che questo aiuti gli altri nel fuoco. –

+2

Si prega di postare che come risposta alla tua domanda. –

+3

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

risposta

21

Vai a risorse/visualizzazioni/errori e crea un file 404.blade.php con quello che vuoi sulla tua pagina 404 e Laravel si prende cura di tutto il resto.

+2

questo funzionerà, ma questo non è qualcosa completamente controllato dallo sviluppatore, come non puoi usare la tua vista errori all'interno del tuo layout. Puoi vedere la mia risposta. –

+4

Wow, tale pubblicità @HaykAghabekyan – ozanmuyes

+0

@HaykAghabekyan, le tue risposte non sono appropriate, perché stai modificando i file principali. Questa risposta è corretta perché è possibile utilizzare la vista di errore all'interno del layout usando il tag '@extends()'. – manix

8

se si vuole avere qualche soluzione globale, si può fare cambiamenti nella /app/Exceptions/Handler.php con l'aggiunta di codice a soffietto

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

Questa è la risposta giusta. Se stai usando Twig o qualche altro motore di template diverso da Blade, questo ti permette di caricarlo come una normale vista. Anche se, devo chiedere cosa è 'layouts/index'? Ho chiamato entrambi a 'errors.404' e ha funzionato.I layout – enchance

+0

sono la mia cartella in cui conservare i file del modello principale, ad esempio indice, che è il mio file modello predefinito. –

+0

sì, d'accordo sul fatto che sia corretto. – heisian

1

Mi piace l'approccio caso dichiarazione, ma ha alcuni problemi che vanno livelli in profondità.

Tuttavia, questa cattura tutti gli errori:

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

In laravel 5 si può semplicemente mettere un costume 404.blade.php sotto Resources/views/errori e il gioco è fatto. Per altri errori come 500 si potrebbe provare quanto segue nel app/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); 
} 

E fare lo stesso per 500 HTTP exeptions

1

laravel 5 ha già un rendering predefinito method (riga 43) sotto app/Exceptions/Handler.php. Basta inserire il codice di reindirizzamento prima di parent :: render. Ad esempio,

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

Nota: La mia vista è sotto risorse/viste. Puoi in qualche modo metterlo da qualsiasi altra parte.