Filament 框架入门总览:基于 Laravel + Livewire 的服务端驱动 UI(SDUI)框架
【免费下载链接】filamentA powerful open-source UI framework for Laravel • Build and ship apps & admin panels fast with Livewire项目地址: https://gitcode.com/GitHub_Trending/fi/filament
Filament 是一个构建在 Laravel 之上的 Server-Driven UI(SDUI)框架:你可以用纯 PHP 的结构化配置对象定义界面,而不是手写模板,从而快速构建管理后台(Admin Panel)、仪表盘、用户门户甚至完整应用。本文以官方入门文档(docs/01-introduction/01-overview.md)为核心,结合本仓库源码,系统讲解 Filament 的核心概念、包结构、插件生态、样式定制与测试策略,帮助你理解它的设计哲学并快速上手。
什么是 Filament:从「模板渲染」到「服务端驱动」
官方文档开宗明义:Filament 是一个面向 Laravel 的 Server-Driven UI(SDUI)框架。它允许你用结构化的 PHP 配置对象来定义用户界面,而不是依赖传统的模板渲染。框架底层基于 Livewire、Alpine.js 与 Tailwind CSS 构建,因此你可以在不编写任何自定义 JavaScript 或前端代码的情况下,构建出功能完整的界面——例如管理后台、仪表盘、表单类应用。
需要区分两个概念:
- Server-Rendered UI(服务端渲染):依赖静态模板(如传统 Blade 视图),UI 的结构与行为在 HTML 或 PHP 文件中提前定义好;
- Server-Driven UI(服务端驱动):由服务器根据实时配置与业务逻辑动态生成UI,无需直接修改前端模板即可获得更高的灵活性与响应性。Meta、Airbnb、Shopify 等公司已在大规模生产环境中验证了这一架构模式。
Filament 正是把 SDUI 模式引入 Web 开发:你用 PHP 类以声明式方式定义界面,服务器负责将其渲染为 HTML。在源码层面,这一设计体现在filament/schemas包中——它的核心类 Schema.php 通过make()工厂方法创建实例,由configure()完成配置,将一组「组件」PHP 对象(HasComponents)作为 UI 的配置来源,而Schema本身继承自ViewComponent并实现HasEmbeddedView,最终由服务器端渲染输出。
Filament 的应用范围远不止管理后台:你可以用它构建自定义仪表盘、用户门户、CRM,甚至由多个 Panel 组成的完整应用。它与任何前端栈都能无缝集成,尤其适合与 Inertia.js、Livewire、Blade 搭配使用。如果你的 Laravel 应用已经在使用 Blade 视图,也可以直接把 Filament 驱动的 Livewire 组件嵌入任意 Blade 视图或路由中,复用同一套基于 schema 的表单、表格构建器,而无需切换整个技术栈。
核心包结构:从 panel 到 support
Filament 的核心由多个 Composer 包组成,每个包承担独立的职责。仓库 composer.json 中的autoload映射(Filament\Actions\、Filament\Forms\、Filament\Schemas\、Filament\Tables\等命名空间分别指向packages/*/src)与下方清单一一对应:
| 包名 | 职责 | 仓库源码位置 |
|---|---|---|
filament/filament | 核心包,用于构建 Panel(如管理后台)。由于 Panel 常使用其他包的诸多特性,它依赖全部其他包 | packages/panels/src |
filament/tables | 数据表格构建器,支持过滤、排序、分页等交互 | packages/tables/src |
filament/schemas | 用「组件」PHP 对象数组作为配置来构建 UI 的包,是许多 Filament 功能渲染 UI 的基础,内置一批基础内容渲染组件 | packages/schemas/src |
filament/forms | 基于filament/schemas组件扩展出的各类表单输入(字段)集合,自带完整校验 | packages/forms/src |
filament/infolists | 渲染「描述列表」的 schema 组件集合,由「entries」组成,以键值对 UI 呈现文本、图标、图片等只读信息,数据可来自任意来源(常见为单个 Eloquent 记录) | packages/infolists/src |
filament/actions | Action 对象封装按钮 UI、按钮可打开的交互式模态窗口、以及模态提交后执行的逻辑三部分,可用于 UI 任意位置,常用于执行删除记录、发送邮件、按模态表单输入更新数据等一次性操作 | packages/actions/src |
filament/notifications | 向应用 UI 中的用户发送通知:请求后立即出现的「flash」通知、存入数据库并可随时在 slide-over 模态中打开的「database」通知、通过 WebSocket 实时送达的「broadcast」通知 | packages/notifications/src |
filament/widgets | 仪表盘「widget」集合,可渲染任意内容,通常是统计数据;图表、数字、表格以及完全自定义的 widget 都能在仪表盘中渲染 | packages/widgets/src |
filament/support | 供所有其他包共享的 UI 组件与工具集合,一般无需用户直接安装(它是其他包的依赖) | packages/support/src |
其中filament/schemas是整个体系的关键抽象。从源码看,Schema.php 组合了大量 Concern(HasColumns、HasComponents、HasState、CanBeValidated、CanBeHidden等),使任何 UI 区域(表单、表格、详情页)都能以「组件树」的方式声明式构建,并在make()时通过服务容器注入 Livewire 组件(实现HasSchemas契约的组件)。filament/forms、filament/infolists、filament/tables等包正是在这套 schema 组件之上叠加各自的领域组件。
插件生态:官方维护与社区扩展
Filament 被设计为高度可扩展的框架。你可以为它添加自己的 UI 组件与特性:
- 如果扩展仅服务于你的应用,可以直接放在你的代码库内;
- 如果是通用能力,可以打包为 Composer 包分发——在 Filament 生态中,这类 Composer 包被称为插件(plugins),社区已有数百个。
Filament 团队也官方维护了一批插件,提供与 Laravel 生态中热门第三方包的集成。本仓库中即可看到这些官方插件的源码,例如:
filament/spatie-laravel-media-library-plugin:集成 Spatie Media Library 的文件上传与展示(源码);filament/spatie-laravel-settings-plugin:集成 Spatie Laravel Settings 的设置页(源码);filament/spatie-laravel-tags-plugin:集成 Spatie Laravel Tags 的标签输入与列(源码);filament/spark-billing-provider:Spark 计费提供商(源码)。
⚠️注意:非 Filament 团队维护的插件由独立作者创建与管理。虽然这些插件能增强你的体验,但 Filament 无法保证其质量、安全性、兼容性或维护状态。官方建议在安装前仔细审查插件的代码、文档与用户反馈。官方与社区插件的完整列表可浏览 Filament 官网的插件目录(插件入门文档 提供了开发插件的进一步指引)。
插件能力在源码中有充分体现:例如 packages/panels/src/Panel.php 是 Panel 的构建入口,支持在 Panel 上注册插件、资源、页面与 widget;各插件的ServiceProvider(如SpatieLaravelSettingsPluginServiceProvider)负责注册其表单字段、表格列等扩展。社区插件中绝大多数开源免费,也有部分付费的优质插件(通常附带增强的客户支持与质量保证)。
定制外观:基于 Tailwind 的「语义化」设计系统
Filament 使用 Tailwind CSS 作为基于 token 的设计系统,但这里有一个关键差异:Filament 组件渲染出的 HTML 并不直接使用 Tailwind 工具类,而是把 Tailwind 工具类编译成语义化 CSS 类(如.fi-btn)。这样你就可以用自己的 CSS 精准覆盖这些语义类,在 Filament 默认设计之上叠加一层薄薄的样式覆盖,无需编写整套自定义样式表,也无需为每个组件维护 HTML 副本。
文档给出的经典例子是修改所有按钮的圆角。Filament 源码中按钮的默认样式位于 packages/support/resources/css/components/button.css,编译前的源码使用了 Tailwind 工具类:
.fi-btn { @apply relative inline-grid grid-flow-col items-center justify-center gap-1.5 rounded-lg px-3 py-2 align-middle text-sm font-medium transition duration-75 outline-none; }(实际编译产物即为文档所展示的rounded-lg px-3 py-2 text-sm font-medium outline-none等规则。)
如果你希望把圆角调小为rounded-sm,只需在自己的 CSS 文件中写:
.fi-btn { @apply rounded-sm; }这会用rounded-sm覆盖默认的rounded-lg,同时保留按钮的其他样式属性。从源码看,同一文件还定义了尺寸变体(.fi-size-xs、.fi-size-sm、.fi-size-lg、.fi-size-xl)、禁用态(.fi-disabled)、描边态(.fi-outlined)等,这些语义类同样可以被覆盖。该设计赋予了极高的外观定制灵活性。更系统的定制方式见 自定义样式文档,其中包含颜色、CSS 钩子、图标等主题。
测试:为你的 Filament 应用编写测试
Filament 的核心包在每次发布前都会经过单元测试以保证稳定性,本仓库的 tests 目录即为佐证——测试按包划分(tests/src/Actions、tests/src/Forms、tests/src/Tables、tests/src/Panels、tests/src/Schemas、tests/src/Widgets等),覆盖了 action 模态、表单校验、表格列、schema 组件等核心行为,并在 composer.json 的scripts中配置了针对 SQLite / MySQL / PostgreSQL 三种数据库的 Pest 测试命令(如composer test:sqlite、composer test:mysql、composer test:pgsql)。
作为 Filament 用户,你也可以为基于 Filament 构建的应用编写测试。Filament 提供了同时适用于 Pest 与 PHPUnit 测试套件的工具,既能测试功能逻辑,也能测试 UI 组件。当你定制框架或实现自定义功能时,测试尤为关键;即便只是验证基础功能是否按预期工作,测试同样有价值。测试方法论详见 测试文档。
备选方案:如果 Filament 不适合你
官方文档也坦诚地列出了 Laravel 生态中一些优秀的替代方案,帮助你做技术选型:
- 觉得 Filament 太复杂:Laravel Nova 是 Laravel 团队官方维护的项目,是构建 Laravel 管理后台的轻量方案,购买它同时也在支持 Laravel 框架的开发。
- 不想用 Livewire 做任何定制:Filament 的许多部分完全不需要你接触 Livewire,但构建自定义组件时可能涉及。Laravel Nova 基于 Vue.js 与 Inertia.js 构建,如果你的项目需要大量定制且熟悉这些技术,可能更合适。
- 需要开箱即用的 CMS:Statamic 是基于 Laravel 的 CMS,适合需要易于安装使用、且无需自行构建管理后台的场景。
- 只想写 Blade 视图、后端自己处理:Flux 是官方 Livewire UI 工具包,提供一套预构建、预样式的 Blade 组件,由维护 Livewire 与 Alpine.js 的同一团队维护。
下一步:从安装到开始构建
安装与构建流程在 安装文档 与 快速上手 中有完整介绍。简要路线如下:
- 在 Laravel 项目(要求 PHP 8.2+、Laravel v11.28+、Tailwind CSS v4.1+)中运行
composer require filament/filament:"^4.0"与php artisan filament:install --panels,生成并注册app/Providers/Filament/AdminPanelProvider.php; - 用
php artisan make:filament-user创建用户,访问/admin登录; - 进入默认仪表盘后,通过Resources(为模型生成 List / Create / Edit 三个页面,可选用 View 页面)、Widgets(PHP 类 + Blade 视图,本质是 Livewire 组件)与自定义页面(同样是全页 Livewire 组件,常用于设置页、文档等)开始搭建你的应用。
理解本篇介绍的 SDUI 思想、包结构与插件机制后,你就可以在官方文档指引下逐模块深入学习表格、表单、schema 组件与 Panel 配置,构建出完整的生产级应用。
【免费下载链接】filamentA powerful open-source UI framework for Laravel • Build and ship apps & admin panels fast with Livewire项目地址: https://gitcode.com/GitHub_Trending/fi/filament
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考