You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 12:22:34