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
) 转换为 HttpException
s。这些将不会被此处添加的覆盖处理。【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章