Filament 框架入门总览:基于 Laravel + Livewire 的服务端驱动 UI(SDUI)框架
Filament 框架入门总览基于 Laravel Livewire 的服务端驱动 UISDUI框架【免费下载链接】filamentA powerful open-source UI framework for Laravel • Build and ship apps admin panels fast with Livewire项目地址: https://gitcode.com/GitHub_Trending/fi/filamentFilament 是一个构建在 Laravel 之上的 Server-Driven UISDUI框架你可以用纯 PHP 的结构化配置对象定义界面而不是手写模板从而快速构建管理后台Admin Panel、仪表盘、用户门户甚至完整应用。本文以官方入门文档docs/01-introduction/01-overview.md为核心结合本仓库源码系统讲解 Filament 的核心概念、包结构、插件生态、样式定制与测试策略帮助你理解它的设计哲学并快速上手。什么是 Filament从「模板渲染」到「服务端驱动」官方文档开宗明义Filament 是一个面向 Laravel 的 Server-Driven UISDUI框架。它允许你用结构化的 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 到 supportFilament 的核心由多个 Composer 包组成每个包承担独立的职责。仓库 composer.json 中的autoload映射Filament\Actions\、Filament\Forms\、Filament\Schemas\、Filament\Tables\等命名空间分别指向packages/*/src与下方清单一一对应包名职责仓库源码位置filament/filament核心包用于构建 Panel如管理后台。由于 Panel 常使用其他包的诸多特性它依赖全部其他包packages/panels/srcfilament/tables数据表格构建器支持过滤、排序、分页等交互packages/tables/srcfilament/schemas用「组件」PHP 对象数组作为配置来构建 UI 的包是许多 Filament 功能渲染 UI 的基础内置一批基础内容渲染组件packages/schemas/srcfilament/forms基于filament/schemas组件扩展出的各类表单输入字段集合自带完整校验packages/forms/srcfilament/infolists渲染「描述列表」的 schema 组件集合由「entries」组成以键值对 UI 呈现文本、图标、图片等只读信息数据可来自任意来源常见为单个 Eloquent 记录packages/infolists/srcfilament/actionsAction 对象封装按钮 UI、按钮可打开的交互式模态窗口、以及模态提交后执行的逻辑三部分可用于 UI 任意位置常用于执行删除记录、发送邮件、按模态表单输入更新数据等一次性操作packages/actions/srcfilament/notifications向应用 UI 中的用户发送通知请求后立即出现的「flash」通知、存入数据库并可随时在 slide-over 模态中打开的「database」通知、通过 WebSocket 实时送达的「broadcast」通知packages/notifications/srcfilament/widgets仪表盘「widget」集合可渲染任意内容通常是统计数据图表、数字、表格以及完全自定义的 widget 都能在仪表盘中渲染packages/widgets/srcfilament/support供所有其他包共享的 UI 组件与工具集合一般无需用户直接安装它是其他包的依赖packages/support/src其中filament/schemas是整个体系的关键抽象。从源码看Schema.php 组合了大量 ConcernHasColumns、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-providerSpark 计费提供商源码。⚠️注意非 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 构建如果你的项目需要大量定制且熟悉这些技术可能更合适。需要开箱即用的 CMSStatamic 是基于 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 页面、WidgetsPHP 类 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),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →