wake-up-neo.net

Zeigt eine 404-Seite an, wenn keine Route in Laravel 5.1 gefunden wurde

Ich versuche, die 404-Seite nicht anzuzeigen, wenn keine Route gefunden wird. Ich habe viele Tutorials verfolgt, aber es funktioniert nicht ... Ich habe 404.blade.php in \laravel\resources\views\errors

Auch in handler.php

public function render($request, Exception $e)
{
    if ($e instanceof TokenMismatchException) {
        // redirect to form an example of how i handle mine
        return redirect($request->fullUrl())->with(
            'csrf_error',
            "Opps! Seems you couldn't submit form for a longtime. Please try again"
        );
    }

    /*if ($e instanceof CustomException) {
        return response()->view('errors.404', [], 500);
    }*/

    if ($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException)
        return response(view('error.404'), 404);

    return parent::render($request, $e);
}

Wenn ich im Browser eine falsche URL eingebe, wird eine leere Seite zurückgegeben. ich habe 

'debug' => env('APP_DEBUG', true),

in app.php.

Kann mir jemand helfen, wie ich eine 404-Seite anzeigen kann, wenn die Route nicht gefunden wird? Vielen Dank.

17
vision

Ich habe 500 Fehler anstelle von 404 Fehlern erhalten. Ich habe das Problem so gelöst:

In der Datei app/Exceptions/Handler.php gibt es eine Funktion render .

Ersetzen Sie die Funktion durch diese Funktion:

public function render($request, Exception $e)
{
    if ($this->isHttpException($e)) {
        switch ($e->getStatusCode()) {

            // not authorized
            case '403':
                return \Response::view('errors.403',array(),403);
                break;

            // not found
            case '404':
                return \Response::view('errors.404',array(),404);
                break;

            // internal error
            case '500':
                return \Response::view('errors.500',array(),500);
                break;

            default:
                return $this->renderHttpException($e);
                break;
        }
    } else {
        return parent::render($request, $e);
    }
}

Sie können dann Ansichten verwenden, die Sie in views/errors/404.blade.php usw. speichern.

21
Pim

@ tester.Ihr Problem wurde bereits behoben. Versuchen Sie den folgenden Befehl in composer:

php artisan view:clear

Dann versuchen Sie es noch einmal mit einer unbekannten URL. Weil ich auch schon vor dem gleichen Fehler gestanden habe.

5
user4294557

 enter image description here > Die Abbruchmethode löst sofort eine Ausnahme aus, die vom Ausnahmebehandler ausgegeben wird. Optional können Sie den Antworttext angeben:

abort(403, 'Unauthorized action.');

ist app_debug auf true gesetzt? Wenn dies der Fall ist, gibt Laravel den Fehler mit Backtrace für Debugging-Zwecke aus. Wenn Sie den Wert in false ändern, zeigt Laravel die Standard-404-Seite im Fehlerordner an. Davon abgesehen, können Sie jederzeit den Abbruch verwenden. Auf Controller-Ebene oder auf Route-Ebene liegt es ganz bei Ihnen. 

dh 

Route::get('/page/not/found',function($closure){
  // second parameter is optional. 
  abort(404,'Page not found');
  abort(403); 
});
3
mdamia

Sie müssen den Fehlertyp nicht überprüfen und die 404-Ansicht manuell rendern. Laravel kann bereits die Ansicht mit dem HTTP-Fehlercode darstellen, der ausgelöst wurde (404 = resources/views/errors/404.blade.php). Beseitigen Sie die zusätzliche Prüfung und es sollte gut funktionieren.

public function render($request, Exception $e)
{
    if ($e instanceof TokenMismatchException) {
        // redirect to form an example of how i handle mine
        return redirect($request->fullUrl())->with(
            'csrf_error',
            "Opps! Seems you couldn't submit form for a longtime. Please try again"
        );
    }

    return parent::render($request, $e);
}
1
patricus

Ich verwende Folgendes in app/Exceptions/Handler.php (Laravel 5.2):

/**
 * Render an exception into an HTTP response.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Exception  $e
 * @return \Illuminate\Http\Response
 */
public function render($request, Exception $e)
{
    if ($e instanceof \ReflectionException OR $e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException) //Si la ruta no existe, mostar view 404.
        return response(view('errors.404'), 404);
    return parent::render($request, $e);
}

Und es sieht so aus: img

1
Shinseiki86

In Apache können Sie diesen Code in die .htaccess-Datei in Ihrem Hauptverzeichnis einfügen und sicherstellen, dass die AllowOverride-Direktive in all in der httpd-confg-Datei geändert wird

ErrorDocument 404 the\path\to\404.blade.php
0
Mohammed Elhag