30

这真让我抓狂。我正在使用 Laravel 5,看来 4.2 和生成 404 页面的文档不起作用。

首先,没有 global.php,所以我尝试将以下内容放入 routes.php:

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

这会导致错误“找不到方法缺失()”

调试设置为假。

我已经搜索和搜索,但到目前为止还没有找到有关在 Laravel 5 中设置 404 页面的信息。希望有任何帮助。

4

8 回答 8

60

转到 resources/views/errors 并在 404 页面上创建一个 404.blade.php 文件,其中包含您想要的内容,其余的由 Laravel 处理。

于 2015-02-06T16:44:44.113 回答
14

如果您想要一些全局解决方案,您可以通过添加以下代码在 /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);
}
于 2015-06-14T17:17:06.690 回答
5

在 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 执行相同的操作

于 2015-09-14T21:39:03.103 回答
3

我喜欢案例陈述方法,但它有一些深入的问题。

但是,这会捕获所有错误:

Route::any('/{page?}',function(){
  return View::make('errors.404');
})->where('page','.*');
于 2015-08-17T01:36:27.347 回答
2

Laravel 5 在 app/Exceptions/Handler.php 下已经有一个预定义的渲染方法(第 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);
}

注意:我的视图在资源/视图下。你可以以某种方式把它放在你想要的任何其他地方。

于 2015-11-15T00:09:06.337 回答
1

拉瓦维尔 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');
于 2020-03-09T22:14:31.747 回答
1

我一直在寻找其他问题的答案,但我想如果其他人正在寻找这个问题,我会提供帮助。

运行命令php artisan vendor:publish 你将看到所有可发布的文件。输入 laravel-errors 的编号,然后将错误文件发布到 resources/views/errors 文件夹

于 2020-09-25T09:48:43.450 回答
0

您必须在资源/视图中创建“错误”文件夹并将 404.blade.php 文件放在错误文件夹中。它将完成工作。您不需要在 App/Exception 文件夹中编辑 handler.php 文件。

于 2021-09-23T08:06:32.393 回答