如何为VimeoUploadException定制Laravel错误页面?
解决Laravel 10/FilamentPHP 3中Vimeo上传限额异常的自定义错误页面问题
你遇到的是自定义业务异常(VimeoUploadException),这类异常不属于Laravel默认按HTTP状态码匹配的错误页面范畴,所以直接发布laravel-errors视图不会生效,需要手动捕获并处理:
步骤1:修改异常处理器
打开app/Exceptions/Handler.php,在register方法中添加该异常的捕获逻辑:
use Vimeo\Exceptions\VimeoUploadException; public function register(): void { $this->reportable(function (Throwable $e) { // 保留原有报告逻辑 }); // 捕获Vimeo上传限额异常 $this->renderable(function (VimeoUploadException $e, $request) { // 判断是否是Filament请求,针对后台界面单独处理 if ($request->is('admin/*') || $request->header('X-Filament')) { // 返回Filament风格的错误提示(跳转回原页面并显示错误) return redirect()->back()->withErrors([ 'message' => $e->getMessage() ]); // 若需要单独错误页,可替换为: // return response()->view('errors.vimeo-upload-limit', ['message' => $e->getMessage()], 403); } // 针对前台请求返回普通自定义错误页 return response()->view('errors.vimeo-upload-limit', [ 'message' => $e->getMessage() ], 403); }); }
步骤2:创建自定义错误视图
在resources/views/errors目录下创建vimeo-upload-limit.blade.php,根据场景选择对应的模板:
针对Filament后台的模板
<x-filament-panels::page> <div class="flex flex-col items-center justify-center space-y-4 py-8"> <x-filament::icon name="heroicon-o-exclamation-triangle" class="w-16 h-16 text-danger-500" /> <h2 class="text-2xl font-bold text-gray-900">上传失败</h2> <p class="text-gray-600 text-center max-w-md">{{ $message }}</p> <x-filament::button href="{{ route('filament.admin.pages.dashboard') }}" class="mt-4"> 返回后台首页 </x-filament::button> </div> </x-filament-panels::page>
针对前台页面的模板
@extends('layouts.app') @section('content') <div class="container"> <div class="row justify-content-center"> <div class="col-md-8"> <div class="card"> <div class="card-header">上传失败</div> <div class="card-body"> <p>{{ $message }}</p> <a href="{{ url('/') }}" class="btn btn-primary">返回首页</a> </div> </div> </div> </div> </div> @endsection
步骤3:表单内直接提示(可选)
如果希望在Filament表单提交时不跳转,直接在表单内显示错误,可以在对应的Create/Edit页面或自定义Action中手动捕获异常:
// 在Filament的页面逻辑中 try { // 执行Vimeo上传代码 } catch (VimeoUploadException $e) { $this->addError('video', $e->getMessage()); }
测试验证
触发Vimeo上传限额异常后,系统会自动加载你定义的错误视图或显示表单内错误提示。
内容的提问来源于stack exchange,提问作者mstdmstd
相关产品推荐
相关产品推荐

