發于推薦超好用的 6 款 Laravel Admin 管理模版 | 碼匠技術博客
如果您正在為您的企業調研開發 Admin 管理后臺的最佳方案,那么基于 PHP 的 Laravel 框架會是一個不錯的選擇,它靈活且易用,還提供了一系列開發規范和組件加速我們的開發。而在這篇文章中,碼匠將為您介紹幾款專門基于 Laravel 打造的美觀且常用的 Admin 管理后臺模板,這些模板提供了很多開箱即用的功能,不僅確保您可以輕松啟動并運行一個 Admin 后臺,還為您節省了大量開發時間。
Laravel Admin 管理后臺模板的不同類型
在搜索引擎中粗略搜索,你會得到大概 20多種 Laravel Admin 模板的選項,盡管它們表面上看起來很相似,但實際上在用途和架構存在著很大差異。在碼匠為大家介紹一些受歡迎選項的具體功能前,讓我們先了解 Laravel Admin 模板五個不同的種類,以便結合自身需求更好地做出判斷:
腳手架主要是通過程序,自動化地創建啟動和運行所需的文件和配置來生成 Laravel 樣板。例如,假設您想為您的活動業務創建一個管理后臺,主要涉及的領域實體為事件、發言人和與會者,腳手架軟件包不僅可以自動為每個實體生成模型、控制器、路由、視圖等,還包括了 CRUD 操作,這將為您節省乏味又重復地手動創建這些樣板的時間。但是,腳手架只能在開始一個項目時才有用,如果您在初始設計中犯了錯誤,后續則很難進行更改和調整。腳手架軟件包的一個例子可以參考 InfyOm Laravel Generator。
Laravel 開發準備之安裝腳手架
Laravel 框架遵循 MVC(模型-視圖-控制器)模式,提供 CRUD 接口是 Laravel Admin 模板的一種流行架構方法。這些是視圖和控制器的集合,可以自動添加 CRUD 邏輯和 UI 到現有的模型中。這種結構提供了一種快速獲得模塊化管理后臺的方法,它可以輕松地添加到一個新的應用程序中,或改裝到一個現有的應用程序中。一些流行的支持該功能的 Laravel 管理模板包括 Nova、Backpack 和 Orchid 等。
但缺點是,如果您業務上有著復雜的模型關系,可能很難讓它按照您的要求來工作。
一個可視化的編程平臺能夠允許您單純從一個圖形用戶界面 (GUI) 來管理您的站點,這有點像 CMS,但可以添加更詳細的站點配置。
當您的團隊有非開發人員時,一個可視化的編程平臺會是一個不錯的選擇,但這些軟件包通常局限在通用功能上。這種類型的后臺模板的例子是 Voyager 和 Backpack DevTools。
一些管理后臺模板只關注用戶界面,即組件庫、主題等等,例如 Creative Tim 的 Argon 管理模板 不提供任何 CRUD 接口或生成器,但提供很多對管理應用程序有幫助的詳細的前端組件——如表格、圖表、菜單等。
如果您的應用程序已經有了一套完善的后端邏輯,或者后端邏輯希望自己編寫,那么這種類型的工具就會很有用。
管理后臺模板的另一個不同之處在于它們是付費的還是免費(開源)的,免費的固然是大家所傾向的,但付費軟件往往提供更強大的業務模型與客服支持。
如果您的目標是開發一個既能省錢又能省時的工具,那么花少量的錢買一個付費項目可能更適合。如果不希望花錢,那么找一個開源并且有著更活躍的社區的模板是一個更好的選擇。
碼匠
在您深入了解多種 Laravel Admin 模板之前,不妨先了解下碼匠,碼匠是一款開發者友好的低代碼平臺,您無需了解 React 開發、部署等各種細節,就可以快速打通前后端連接 REST API、MySQL、MongoDB 等多種數據源,然后通過一套開箱即用的組件,就可以輕松搭建功能完善的數據看板、數據洞察、Admin 管理后臺等多種應用。
使用碼匠快速搭建 CRM 系統(具體可參考:https://majiang.co/templates/mysql-crm)
碼匠主要面向國內用戶,相較于國外開發的 Admin 后臺工具,碼匠的 UI 界面設計更加適合國內業務場景。同時碼匠整合了多款國內常見數據源,包括飛書、企業微信、釘釘、阿里云 OSS等。不僅如此,碼匠還一站式提供了企業內部系統常用的租戶管理、細粒度的權限控制、審計日志等功能,讓您快速搭建后臺應用的同時,也為您的企業信息安全保駕護航。
Laravel Admin 管理后臺模板推薦
了解了區分 Laravel 管理后臺模板的一些主要因素后,碼匠將具體介紹和比較 Laravel 中一些流行的軟件包:Nova、Orchid、Backpack、Argon 和 InfyOm Laravel Generator,以便您更好地了解 Laravel Admin 模板并選擇出一款適合您的項目。
Laravel 官方提供的 Admin 管理模板是 Nova,它主要是由 Laravel 的作者 Taylor Otwell 創建的。它的首次發布是在 2018 年,相對來說較晚。Nova 的架構是一個CRUD 界面,只需很少的配置就能允許用戶完全從 UI 界面管理他們的數據庫記錄。
Nova 提供可配置的 UI 功能,例如搜索、過濾和自定義操作。這些功能開箱即用,也可以在前端和后端進行自定義(Nova 使用 Vue.js 作為前端組件)。
在 Nova 中向模型添加 CRUD 操作的機制被稱為資源,這些是您可以在命令行上創建的類似控制器的類,例如要創建一個 Post 資源:php artisan nova:resource Post,一個新類會顯示在您項目的 app/Nova 目錄中,不僅如此,它還會自動顯示在 Nova 模板中供您使用。通常大多數 Laravel 模型在 Nova 中工作無需任何額外的配置,但您可以定義具體的細節,如字段如何被編輯等。
此外,Nova 另一個值得關注的特點是允許您在一個或多個模型上執行自定義任務。例如您可以編寫一個將用戶的會員訂閱延長一個月的操作,先在資源文件中編寫這方面邏輯,再在用戶界面中檢查,然后從動作下拉列表中選擇操作。
Orchid 主要由俄羅斯開發者 Alexandr Chernyaev 開發,是 Laravel 框架的開源 CRUD 接口包,允許您使用表單生成器、表格過濾和排序以及文本搜索等便利的功能來快速開發管理模板。
Orchid 最吸引人的是它的開源社區,在沒有任何付費項目的情況下能夠維護好其完善的功能。
與 Nova 的開箱即用不同,Orchid 需要您通過名為 screen 的類來創建管理模板的邏輯和外觀。每個模板都為特定模型定義 CRUD 接口,可以從任何來源獲取數據,包括 Eloquent 模型以及外部 API。此外,您還可以通過布局和組件來自定義屏幕的查詢和權限以及視圖層。
雖然這比使用 Nova 需要更多的手動操作,但它非常靈活,易于迭代和定制。
Backpack 是羅馬尼亞開發者 Cristian T?b?citu 于 2016 年創建的一個 Laravel Admin 項目。它是一個強大的全能工具,因為它不僅有一個 CRUD 接口包,還有一個可選的可視化編程界面,以及它自己的 UI 框架。鑒于這種多功能性,Backpack 不是免費的,但可以為非商業用途提供免費許可。
與 Nova 和 Orchid 類似,Backpack 的核心是為應用程序的模型(簡稱CRUDS)提供一個 CRUD 接口,這些是管理模板的部分,操作由添加到標準 Laravel 類的方法和特點來定義。您可以從命令行生成 CRUDS,或者可以使用 Backpack DevTools 工具,它提供了一個 Web 界面,可以從用戶界面快速生成 CRUDS。
Backpack 擁有自己的 UI 軟件包,叫為Backstrap。這是基于 CoreUI 和 Bootstrap 4 的,能夠確保您的管理站點在沒有任何配置的情況下看起來整潔專業。
與我們目前看到的其他管理模板包不同,Voyager 是 Laravel Admin 應用的可視化開發平臺,允許您從 UI 生成而不用敲代碼。這對于某些類型的項目來說可能是完美的,但您會被限制在一個拓展性有限的 GUI 中,其靈活性遠遠低于代碼。
Voyager 提供了一個資源管理器,無論文件是在本地存儲中還是在 S3 等遠程存儲中,您都可以從 UI 中查看、編輯和刪除這些文件。它不僅有一個菜單生成器,允許您管理網站的菜單,還有一個數據庫管理器,允許您添加、編輯和刪除表格。Voyager 是圍繞 BREAD 功能構建的,您可以指示任何表的瀏覽、讀取、編輯、添加和刪除功能。
每當設置 Laravel 項目時,都需要定義每個實體的模型、控制器、路由和視圖,這也許很乏味并且需要大量時間。
InfyOm Laravel Generator 是由印度開發公司 InfyOm 創建的工具,它是為創建 Laravel 管理網站而制作的,可以在幾分鐘內將您所有的模板代碼構建起來。
開始一個項目時,您需要使用 CLI 或 JSON 文件定義事件及其字段,完成后您可以開始編寫腳手架腳本,比如:php artisan infyom:scaffold $MODEL_NAME --fieldsFile=mySchema.json,之后生成器將嘗試創建所有的文件和內容,以實現完整的CRUD功能,包括模型、控制器、組件模版、路由、測試案例、數據表等,完成這些后,就會有一個按照您的要求配置出的 Laravel 管理網站。
Argon Laravel Dashboard 是一個基于 Bootstrap 4 的管理模板,為 Laravel 打造。其專業版(149 美元授權)含有 100+ 靈活的組件,如圖表、表格等。Argon 包含一個 Laravel 后端,但非常初級,它不包括我們在其他項目中看到的用于 CRUD 接口、腳手架或可視化編程的任何特殊包。出于這個原因,我認為這個產品最適合那些想自己編寫后端邏輯,且主要想在視圖層得到幫助的項目。
Argon 設計系統基于Bootstrap 4 ,并允許使用 Sass 預處理器輕松自定義 CSS 。它提供了 100 多個 UI 組件,
從按鈕和表單輸入到圖表和圖片輪播。
購買 Argon 時,您可以決定要為哪個前端庫編寫交互方面的內容,包括 jQuery、React、Vue 和 Svelte。Argon 還為 Laravel 后端提供了一些基本的 CRUD 實體,包括用戶、角色、類別和項目。
寫在最后
在使用 Laravel 構建管理模板時有多種選擇,每個工具都有自己的優點和缺點,您選擇的工具將取決于您項目的具體要求以及您團隊的優勢。
本文為原創內容,版權歸「碼匠Majiang」所有。歡迎文末分享、點贊、在看三連。轉載請聯系后臺~
本來講完路由和控制器,應該接著講一講視圖的,但是鑒于視圖的功能實在太枯燥,況且是前端頁面,免不了寫一些js和css。而laravel是偏重后端的,所以為了給后端的開發同學緩沖的時間,我們跳過視圖,先來說說用戶數據的獲取和處理,這幾乎是任何應用必備之功能。
用戶數據同時又是危險的!本文不會教你規避危險!
我們在講路由規劃的時候,說了如何使用url的位置參數綁定的方式進行導向,其實那也是一種獲取用戶輸入數據的方式, 只不過,傳入的位置參數一般都人畜無害,公開訪問,任你來來往往。
如果是單個用戶的私密數據,必然是不能直接url內嵌傳輸的。
laravel把用戶的輸入存儲在 Input 對象內,而從邏輯上看,用戶輸入應該歸屬于請求項的,所以 Request 也繼承了 Input 的方法和數據。 比如有下面的路由:
Route::post('form', function (Illuminate\Http\Request $request) {
// $request->method()
});
模擬的是一個表單地址,通過post方法傳送數據,然后使用 Request 方法。可供使用的獲取方法,我們一一道來。
先說說 $request->all(),這一個是打印所有的輸入數據,比如表單內可能有下面這些字段。HTML 內容你們將就看一下哈!
<form method="post" action="/post-route?utm=12345">
{{ csrf_field() }}
<input type="text" name="firstName">
<input type="submit">
</form>
為了調試數據,我們的路由這樣注冊:
Route::post('/post-route', function (Request $request) {
var_dump($request->all());
});
大家猜猜會輸出些什么內容呢?
/**
* [
* '_token'=> 'CSRF token here',
* 'firstName'=> 'value',
* 'utm'=> 12345
* ]
*/
沒錯兒,就是看到的post表單的字段 firstName,還有 querystring 的查詢參數 utm,還有一個是用于 CSRF 防護的laravel內置函數,默認的表單字段就是 __token,所以大可不必費心。
但是有代碼潔癖的同學會覺得受不了,這個不是我的字段,我在代碼里也用不到,我不想看到這個 __token,這個陌生的變量。可以,我們在請求參數內直接過濾掉就好了:
Route::post('/post-route', function (Request $request) {
var_dump($request->except('_token'));
});
其中,except() 方法就是用來過濾某些字段,不需要使用的。與之對應的就是 only() 方法,是指定哪些是用的字段。這樣用:
$request->only(['firstName', 'utm']);
還有些時候邏輯判斷有些鍵是否存在,laravel提供了兩種方式判斷是否存在,一個是 has ,一個是 exists。有同學會疑問,為什么有了 has還要 exists呢?因為他們的作用不同。
has方法不僅會判斷該鍵存在,如果該鍵的值是 空(比如 null,空字符串,false,0,空數組,空對象等等),也是判斷為false的。所以就有必要使用 exists 單純地判斷鍵的存在與否,大家用的時候一定要注意這個細微的差別。
用法很簡單,直接調用方法即可:
if ($request->has('utm')) {
// Do some work
}
如果對于輸入值鍵不存在,我們也可以為其設置一個默認值,這就是 input 方法的第二個參數,使用如下調用:
Route::post('/post-route', function (Request $request) {
$userName=$request->input('name', 'anonymous');
});
如果用戶沒有傳入 name 字段,那么就用 anonymous 替代。
上面說的都是簡單的鍵值對,還有一種表單,傳入的字段可能會是數組,比如下面這個:
<form method="post" action="/post-route">
{{ csrf_field() }}
<input type="text" name="employees[0][firstName]">
<input type="text" name="employees[0][lastName]">
<input type="text" name="employees[1][firstName]">
<input type="text" name="employees[1][lastName]">
<input type="submit">
</form>
laravel內獲取數組可以使用點式方式讀取,這是因為laravel解析的時候使用了助手類 Arr 的通用方法。比如獲取某個鍵:
$employeeZeroFirstName=$request->input('employees.0.firstName');
明確地指定鍵名,并對應好層級即可。還可以使用星號匹配某一層級所有的鍵:
$allLastNames=$request->input('employees.*.lastName');
或者僅指定某個鍵,后面不管多少層級原樣返回:
$employeeOne=$request->input('employees.1');
具體用法讀者可以查看源碼或文檔,深入研究一下Arr操作類的用法。
本文幾乎涵蓋了用戶輸入input方法的最為常用的一些方法,我們只講了怎么正常地獲取用戶數據,沒有講如何驗證數據有效性。因為前端驗證幾乎形同虛設,最后能寫到數據庫的數據,還是要應用程序把關。
那就是驗證器的工作了,驗證器,我們放到后續章節再詳細地講。
Happy coding :-)
我是@程序員小助手,專注編程知識,圈子動態的IT領域原創作者
*請認真填寫需求信息,我們會在24小時內與您取得聯系。