laravel 5 自定义 404

Posted

技术标签:

【中文标题】laravel 5 自定义 404【英文标题】:laravel 5 custom 404 【发布时间】:2014-12-11 04:58:15 【问题描述】:

这快把我逼疯了。我正在使用 Laravel 5,但 4.2 和生成 404 页面的文档似乎不起作用。

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

App::missing(function($exception)

    return Response::view('errors.missing', array(), 404);
);

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

Debug 设置为 false。

我已经搜索和搜索,但到目前为止还没有找到有关在 Laravel 5 中设置 404 页面的信息。不胜感激。

【问题讨论】:

感谢另一位用户,我找到了解决方案。将 $handler->missing() 添加到 ErrorServiceProvider 就可以了。希望这对未来的其他人有所帮助。 请将其发布为您问题的答案。 重复:***.com/questions/26630985/… 这可能会帮助你codezen.io/how-to-create-a-custom-404-page-in-laravel-7 【参考方案1】:

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

【讨论】:

这会起作用,但这不是由开发人员完全控制的,因为您不能在布局中使用错误视图。你可以看到我的答案。 哇,这样的广告@HaykAghabekyan @HaykAghabekyan,您的答案不合适,因为您正在编辑核心文件。这个答案是正确的,因为您可以使用 @extends() 标签在布局内使用错误视图。 这是正确答案。如果您想使用404.twig 进行更多控制,您甚至可以使用 Twig,其余的由 L5 完成。由于它是 twig,请随意扩展您想要的任何模板。 是的,您可以使用@extends(),但是如何设置在父视图中使用的变量?例如你有带有菜单的页眉和页脚。【参考方案2】:

如果你想有一些全局解决方案,你可以在 /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);

【讨论】:

这是正确的答案。如果您使用 Twig 或 Blade 以外的其他模板引擎,那么这允许您像普通视图一样加载它。虽然,我必须问什么是layouts/index?我将两者都命名为errors.404,并且成功了。 layouts 是我用来保存主要模板文件的文件夹,例如 index,这是我的默认模板文件。【参考方案3】:

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

【讨论】:

【参考方案4】:

我喜欢案例陈述方法,但它存在一些问题。

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

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

【讨论】:

【参考方案5】:

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

注意:我的视图位于资源/视图下。您可以以某种方式将其放在您想要的任何其他位置。

【讨论】:

请注意,parent::render($request, $e) 将一些异常 (ModelNotFoundException) 转换为 HttpExceptions。这些将不会被此处添加的覆盖处理。【参考方案6】:

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

【讨论】:

【参考方案7】:

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

运行命令php artisan vendor:publish 您将看到所有可发布的文件。输入 laravel-errors 的编号 然后将错误文件发布到资源/视图/错误文件夹

【讨论】:

【参考方案8】:

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

【讨论】:

以上是关于laravel 5 自定义 404的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 自定义控制器出现 404 错误

Laravel 8 自定义路由在使用资源时返回 404

laravel框架 5.4自定义报错页面设置

Laravel5.4中自定义404等错误页面

Laravel - 通过自定义列查找或失败

Laravel 5.2 如何将所有 404 错误重定向到主页