これは私を夢中にさせています。 Laravel 5を使用していますが、4.2のドキュメントと404ページの生成が機能しないようです。
まず、global.phpがないため、routes.phpに次のコードを入れてみました。
App::missing(function($exception)
{
return Response::view('errors.missing', array(), 404);
});
これにより、「メソッドmissing()が見つかりません」というエラーが発生します。
デバッグはfalseに設定されています。
私は検索して検索しましたが、これまでのところLaravel 5.に404ページを設定することに関する情報は見つかりませんでした。5。手助けをいただければ幸いです。
Resources/views/errorsに移動し、404ページに必要な内容を含む404.blade.phpファイルを作成します。残りはLaravelが処理します。
グローバルな解決策が必要な場合は、次のコードを追加して、/ app/Exceptions/Handler.phpを変更できます。
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);
}
Laravel 5では、カスタム404.blade.phpをresources/views/errorsの下に置くだけで十分です。他のエラーの場合500のように、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);
}
同じことを500 HTTP Exeptionsにも行います
私はケースステートメントアプローチが好きですが、レベルが深くなるいくつかの問題があります。
ただし、これはすべてのエラーをキャッチします。
Route::any('/{page?}',function(){
return View::make('errors.404');
})->where('page','.*');
Laravel 5には、app/Exceptions/Handler.phpの下に事前定義されたrenderメソッド(43行目)がすでにあります。 parent :: renderの前にリダイレクトコードを挿入するだけです。そのようです、
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);
}
注:私のビューはリソース/ビューの下にあります。あなたは何とかしてあなたが望むどこにでもそれを置くことができます。
Lavavel 5.8
resources/views/errors/404.blade.php
にファイルを作成し、このコードを追加します。
@extends('errors::minimal')
@section('title', __('Not Found'))
@section('code', '404')
@if($exception)
@section('message', $exception->getMessage())
@else
@section('message', __('Not Found'))
@endif
それからあなたのコントローラーであなたは使うことができます:
abort(404, 'Whatever you were looking for, look somewhere else');