web-dev-qa-db-ja.com

Laravel 5.1でルートが見つからない場合、404ページを表示します

ルートが見つからない場合、404ページが見つからないことを表示しようとしています。私は多くのチュートリアルに従いましたが、うまくいきません。私が持っています 404.blade.php in \laravel\resources\views\errors

また、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);
}

ブラウザに間違ったURLを入力すると、空白のページが返されます。私が持っています

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

app.phpで。

ルートが見つからない場合、誰でも404ページを表示する方法を手伝ってくれますか?ありがとうございました。

18
vision

404エラーではなく500エラーを受け取りました。私はこのような問題を解決しました:

App/Exceptions/Handler.phpファイルには、render関数があります。

関数をこの関数に置き換えます。

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

その後、views/errors/404.blade.phpなどに保存したビューを使用できます。

22
Pim

@tester。あなたの問題はすでに解決されています。composerで以下のコマンドを試してください:

php artisan view:clear

次に、不明なURLでもう一度試してください。以前にも同じエラーに直面したことがあるからです。

5
user4294557

enter image description here > abortメソッドは、例外ハンドラーによってレンダリングされる例外をすぐに発生させます。オプションで、応答テキストを提供できます。

abort(403, 'Unauthorized action.');

app_debugはtrueに設定されていますか?その場合、Laravelはデバッグのためにバックトレースでエラーをスローします。値をfalseに変更すると、Laravelはデフォルトの404ページを表示しますエラーフォルダー内で、コントローラーレベルまたはルートレベルでいつでも中止を選択できると言われていますが、それは完全にユーザー次第です。

すなわち

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

エラータイプを確認し、手動で404ビューをレンダリングする必要はありません。 Laravelは、スローされたHTTPエラーコード(404 = resources/views/errors/404.blade.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"
        );
    }

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

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

そして、次のようになります: img

1
Shinseiki86

Apacheでは、このコードをメインディレクトリの.htaccessファイルに配置し、AllowOverrideディレクティブをhttpd confgファイル内のすべてに変更することを確認できます

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