Php laravel 5定制404

Php laravel 5定制404,php,laravel,laravel-routing,laravel-5,Php,Laravel,Laravel Routing,Laravel 5,这让我快发疯了。我正在使用Laravel5,4.2版本的文档和404页面似乎不起作用 首先,没有global.php,因此我尝试在routes.php中添加以下内容: App::missing(function($exception) { return Response::view('errors.missing', array(), 404); }); 这将导致错误“找不到方法缺少() 调试设置为false 我搜索了又搜索,但到目前为止还没有找到关于在Laravel5中设置404页的

这让我快发疯了。我正在使用Laravel5,4.2版本的文档和404页面似乎不起作用

首先,没有global.php,因此我尝试在routes.php中添加以下内容:

App::missing(function($exception)
{
    return Response::view('errors.missing', array(), 404);
});
这将导致错误“找不到方法缺少()

调试设置为false


我搜索了又搜索,但到目前为止还没有找到关于在Laravel5中设置404页的信息。非常感谢您的帮助。

转到参考资料/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);
}

我喜欢案例陈述法,但它有一些深层次的问题

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

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

在Laravel5中,您可以简单地将一个自定义的404.blade.php放在resources/views/errors下,就是这样。对于其他错误,如500,您可以在应用程序/execptions/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例外执行同样的操作,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);
}

注意:我的视图位于参考资料/视图下。你可以把它放在任何你想要的地方。

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

我一直在寻找其他问题的答案,但我想如果有人在找这个问题,我会帮上忙的

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

多亏了另一位用户,我找到了解决方案。将$handler->missing()添加到ErrorServiceProvider可以实现这一目的。希望这能帮助其他人。请将其作为您问题的答案发布。重复:这可能会帮助您,但这不是完全由开发人员控制的,因为您不能在布局中使用错误视图。你可以看到我的答案。哇,这样的广告@HaykAghabekyan@HaykAghabekyan,您的答案不合适,因为您正在编辑核心文件。这个答案是正确的,因为您可以使用
@extends()
标记在布局内部使用错误视图。这是正确的答案。如果您想使用
404进行更多控制,您甚至可以使用Twig。Twig
和L5完成其余部分。由于它是细枝,可以随意扩展任何模板。是的,您可以使用
@extends()
,但如何设置父视图中使用的变量?e、 你有带菜单的页眉和页脚。这是正确的答案。如果您使用的是Twig或其他模板引擎,而不是Blade,那么这允许您像普通视图一样加载它。不过,我必须问一下什么是
布局/索引
?我将这两个文件都命名为
errors.404
,它起作用了。layouts是我保存主模板文件的文件夹,例如index,它是我的默认模板文件。请注意
parent::render($request,$e)
将一些异常(
ModelNotFoundException
)转换为
HttpException
s。此处添加的覆盖不会处理这些问题。