iT邦幫忙

2026 iThome 鐵人賽

0
Modern Web

Laravel Filament 從入門到實戰系列 第 31 篇

Day 30:完賽總結,Filament 的限制與不適合的情境

  • 分享至 

  • xImage
  •  

Day 29:全系列整合驗收,跑一次從新增商品到產生報表的完整流程 結尾留下一句話,這套後台走到今天,已經具備一個真正能上線的系統該有的完整樣貌,功能、關聯、驗證、權限、多租戶、儀表板、效能、測試、部署設定、報表,一應俱全,且經過端到端驗證。回頭看三十天前 Day 1 提出的那個問題,Filament 是不是一個值得信任的選擇,這次驗收正是回答這個問題最直接的具體證據。但拿到一份具體證據,不代表答案已經完整,這條路上做過的每一個取捨,以及這套框架本身有哪些限制,都還沒被誠實檢視過。今天要處理的正是這件事。

三十天前那句尚未被驗證的推測

Day 00:Laravel Filament 從入門到實戰,30 天規劃 的結尾寫下一句話,選擇 Filament,賭的是「開發速度」與「客製化彈性」能不能兼得。Day 01:為什麼是 Filament,跟手刻後台與其他套件比起來差在哪 把這句話正式展開,拆成手刻後台、其他後台套件、Filament 三個對照組,逐一比較彼此在開發速度與客製化彈性上的取捨,最後留下一句結論,這句結論在當時只是一個尚未被驗證的推測,需要用接下來三十天的實際建置經驗回頭檢視。

今天的任務不是重新歌頌 Filament 有多少功能,那份功能清單前面二十九天已經寫得夠清楚,不需要在最後一天重複一遍。今天要做的事情,是誠實地把這三十天走過的路攤開來檢視,當初那句判斷有哪些地方站得住腳、有哪些地方需要修正,並且具體列出這條技術路線不適合的情境。一個系列如果只講自己選中的技術有多好,讀起來像廣告文案,不像一份可以拿來做決策的紀錄,今天要交出的是後者。

手刻後台這條路,三十天下來果然如預期般吃重

Day 01 對手刻後台下的判斷是,工時隨模組數量幾乎線性增加,權限邏輯容易散落在各個 Controller 裡,半年後回頭看很難一眼確認某個角色到底能不能看到某個按鈕。三十天走完,回頭比對系列裡幾個具體天數,這個判斷不是猜測,是能被實際對照出來的落差。

Day 11:Relation Manager,訂單明細這種巢狀資料怎麼管理 處理的是訂單明細這種巢狀關聯資料,Filament 用一個 Relation Manager 類別,把獨立子介面的新增、編輯、刪除全部包好,這件事如果换成手刻,意味著要另外設計一組巢狀表單的前端互動、一組獨立的驗證邏輯、一組跟外層訂單表單协調狀態的機制,工時不會只是「多寫一個表單」這麼單純。Day 16:設計一份貼近真實團隊的角色權限矩陣 到 Day 18:權限與租戶疊加時,驗證兩者不互相打架 這三天處理的多角色權限與多租戶隔離疊加驗證,如果換成手刻,意味著每一個 Controller 的每一個動作,都要手動加上角色判斷跟據點篩選的條件,且沒有一個統一的地方能一眼看出目前的判斷邏輯,這正是 Day 01 當時擔心的「散落在各個 Controller 裡」。

工時隨模組數量線性增加這件事,在系列走到五個模組、十個既定錨點疊加之後,感受特別明顯。這個判斷三十天後依然成立。

其他套件的兩難,Filament 深度綁定 Eloquent 換來了什麼

Day 01 對其他後台套件的判斷是,要嘛犧牲跟既有 Laravel 專案的深度整合換取安裝當下的速度,要嘛保留高度彈性卻犧牲開發速度。Filament 選擇的做法,是深度綁定 Laravel 既有的 Eloquent Model 與 Policy 機制,而不是另外發明一套獨立的資料層或權限系統,這句話在 Day 01 只是一個方向性的描述,三十天下來有具體的天數可以拿出來對照。

Day 15:接上 Laravel 既有的 Policy,誰能看見這個操作按鈕 直接讀取 Laravel 原生的 Policy 類別,判斷某個操作按鈕該不該出現,不需要另外設計一套獨立於 Laravel 之外的權限描述語言。這意味著如果專案原本就有一套寫好的 Policy,接上 Filament 幾乎是直接沿用,不需要重新翻譯成另一套設定格式,也不會出現「兩套權限系統各自維護、彼此可能不一致」的風險。Day 09:表單裡選關聯資料,下拉選單背後在做什麼 也是同樣的邏輯,表單裡的關聯欄位背後用的是 Eloquent 原生的 relationship() 方法,不是另一套獨立的資料查詢語言。這些天數具體展現了深度整合帶來的好處,原本專案裡已經寫好的商業邏輯,不需要為了套用 Filament 而重寫一份。

Day 01 當時寫下的結論是,「在深度整合既有 Laravel 專案、同時兼顧開發速度這個交集區間,Filament 目前是相對均衡的選擇」。三十天後回頭看,這句話依然成立,而且不再只是一句推論,Day 15、Day 17 的多租戶隔離、Day 24 的自動化測試,每一項都建立在這個深度整合的基礎上才得以順利完成,如果 Filament 跟 Laravel 生態之間隔著一層需要額外轉譯的抽象,這些機制不會如系列裡展示的那樣自然銜接。

哪些地方確實需要繞路

前面兩段都在驗證 Day 01 判斷正確的部分,接下來要處理的是同樣重要、卻更容易被略過的部分。Day 01 在給出結論之後,緊接著寫下一句伏筆,「這不代表 Filament 沒有自己的學習曲線,也不代表它能兼顧到光譜兩端的極限值,手刻後台仍然能做到理論上限的彈性,其他套件在最基本的展示情境下仍然可能比 Filament 更快生出畫面」,並且當時聲明這句話背後的具體證據要留到後面的天數才能累積出來。三十天過去,是時候把這句話兌現了。

系列裡確實遇過需要順著框架既定規則走、無法完全隨心所欲客製化的環節。Day 06:表格欄位怎麼呈現,格式化與縮圖顯示 處理表格欄位的呈現方式時,Filament 提供的欄位元件足以應付格式化、縮圖顯示這類常見需求,但如果今天要求的是一種完全脫離表格既定排版邏輯的視覺呈現,例如某種客製化程度極高、跟 Filament 預設卡片或表格外觀截然不同的資訊呈現方式,需要投入的心力會遠高於直接使用框架內建元件,甚至可能需要繞過 Filament 原本的渲染流程,自己重新拼一層 Blade 或前端元件,這時候談不上是「加速」,反而比較接近「在框架的殼裡另外造一個輪子」。

這正是本篇必須誠實面對的第一類不適合情境,高度客製化的視覺或互動需求。如果一個後台需要的是高度品牌化、大量非典型互動設計的介面,不是標準的表單跟列表操作,Filament 提供的加速機制在這種情境下能發揮的優勢有限。它的元件庫設計是為了讓「常見的後台操作型態」被快速組出來,越偏離這個常見型態,越容易感受到框架既定假設帶來的侷限,而不是加速。

第二類不適合情境同樣需要被點名,非典型後台互動需求的場景。系列三十天建置的五個模組,商品、訂單、客戶、庫存、報表,本質上全部是資料驅動的管理型態,操作方式不脫「查看列表、篩選搜尋、新增編輯、檢視關聯」這幾種基本動作,Filament 深度綁定 Eloquent Model 這件事,本身就預設了後台的核心互動是圍繞著資料模型展開。如果後台需要的是高度即時協作,例如多人同時編輯同一份文件並即時看到彼此游標與變更,或是複雜的拖拉排版,例如像簡報編輯器那樣自由擺放元素的畫面,或是遊戲化介面,例如帶有動畫、成就系統、互動式引導的操作體驗,這些場景遠離傳統資料管理後台的型態,Filament 不是為了處理這類互動而設計的,勉強套用,多半會發現框架提供的元件完全用不上,最後還是得繞到 Laravel 原生的路由與前端框架上自己處理。

誠實補一句,這些限制不代表 Filament 是一個不值得學習或不值得使用的工具。任何一個技術方案都有其設計假設下的最佳適用範圍,Filament 的假設是資料驅動的管理後台,落在這個範圍之內,前面二十九天展示的加速效果會持續發生;落在範圍之外,繼續套用只會不斷跟框架的既定假設角力。判斷要不要用它的關鍵,是先確認手上這個專案的需求型態,是否落在這個範圍之內,而不是先問這個套件紅不紅、其他人用得順不順手。

三十天的軌跡,從一個空殼到一套完整系統

限制講完了,回頭看看這三十天實際走過的成長軌跡,這是全系列敘事主線「陽春後台逐步加深」該有的最終樣貌。

第一階段動機與地基,Day 01 到 Day 03,定案示範情境並做出第一個 Resource;第二階段表單與表格,Day 04 到 Day 08,建立日常最常用的建置技巧;第三階段資料關聯,Day 09 到 Day 12,把商品、訂單、客戶串成一個系統;第四階段驗證與生命週期鉤子,Day 13 到 Day 15,讓資料本身站得住腳;第五階段多角色權限與多租戶,Day 16 到 Day 18,讓身分與邊界站得住腳;第六階段 Widget 與儀表板,Day 19 到 Day 21,讓管理者一眼看懂現況;第七階段效能、測試與部署,Day 22 到 Day 25,讓系統具備上線資格;第八階段實戰整合收尾,Day 26 到 Day 29,補上報表模組並完成端到端驗證。

把 Day 2 剛安裝完的樣貌拿出來對照,當時只有一個空的 Panel 容器,什麼都還沒有。今天的樣貌是五個模組、完整權限矩陣、多租戶隔離、客製化儀表板,通過測試,經過端到端驗證的正式系統。這個對照正是「陽春後台逐步加深」三十天下來最終的具體成果,不是一句用來開場的比喻,而是一份真的走過一遍才拿得出來的紀錄。

這個軌跡最重要的意義,不在於學會了 Filament 有哪些功能,那份功能清單隨時可以翻回前面任何一天複習。真正重要的是,走到這裡,理應已經內化了一套判斷方式,知道什麼時候該直接用內建功能,什麼時候該自己動手客製化,什麼時候又該老實承認這件事不歸 Filament 管、得繞道用 Laravel 原生的方式處理。這正是 Day 00:Laravel Filament 從入門到實戰,30 天規劃 對這個系列設定的目標,能獨立把 Filament 用進一個真正會上線的專案,而不是只會照抄教學範例。

三十天成長軌跡,八個階段的核心能力與里程碑,起點 Day 2 空 Panel、終點 Day 29 端到端驗證完成

賭注結算,該做的判斷交還給你

看完三十天的教學,如果對 Filament 還有興趣,歡迎訂閱電子報,每週給你一篇 Filament 進階教學

https://laravel.reccachao.net/newsletter/filament

三十天前,選擇 Filament 賭的是開發速度與客製化彈性能不能兼得,這是一句尚未被驗證的推測。三十天後,一套具備完整權限、多租戶隔離、客製化儀表板,通過測試與端到端驗證的後台管理系統,是這個賭注的具體答案。

在深度整合既有 Laravel 專案、資料驅動的管理後台這個交集區間,這個賭注是站得住腳的。但高度客製化的視覺互動需求、非典型的後台操作型態,不是這條技術路線的核心強項,這些限制同樣誠實地攤在前面幾段裡,不打算等到系列結束後才私下承認。

這份判斷該怎麼用,交代清楚。今天寫的不是要說服每一個讀到這篇的人,都該在下一個專案採用 Filament,而是提供一套具體、可驗證的判斷依據。手上的專案如果落在今天誠實列出的限制範圍之內,這三十天累積的內容依然有參考價值,Resource 怎麼搭、權限怎麼接、多租戶怎麼隔離、報表怎麼從零建出來,前面二十九天都有據可查。但採用與否的最終判斷,交還給讀者自己手上專案的真實需求,這不是一份放諸四海皆準的推薦。

這三十天累積下來的,不是一份該不該用 Filament 的標準答案,而是一套判斷依據。手上的專案要不要走這條路,這個判斷,交還給你自己。三十天前那個尚未被驗證的推測,如今有了一個誠實而完整的答案,這個系列,到這裡結束。


上一篇
Day 29:全系列整合驗收,跑一次從新增商品到產生報表的完整流程
系列文
Laravel Filament 從入門到實戰 共 31 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言