開發者們都是懶惰的,不,我不是在開玩笑,他們努力建立系統,幫助他們在將來避免更多的、尤爲是重複性的工做。如今有一些至關優秀的例子,咱們不須要在編寫重複的代碼,它將直接爲咱們生成。今天咱們將會看到 Laravel 框架中的各式各樣的後臺管理面板、後端開發者建立的例子,它們能夠節省咱們多少時間呢?php
Disclaimer: 我是 quickadminpanel
的創始人,一位創造者。回顧這個市場,這裏確實有偉大的競爭對手,我儘量作人要誠實和公正,他們應該獲得友善的話語和尊重。前端
有兩大類後臺管理面板生成器:可視化構建器和基於命令行的。選擇取決於您的偏好,是否喜歡使用 GUI
視圖面板的,仍是有參數的 Artisan
命令行的。laravel
另外,這裏一個重要的術語,知道 CRUD
這個縮寫表明「建立、讀取、更新、刪除」這些操做基於全部的管理面板。一個 CRUD
一般表明一個菜單項的模型來管理數據。git
重要通知:此文章寫於 寫於 2017 年 4 月 1號,下面全部的擴展包都是在 laravel 5.3 中測試的。在撰寫本文的時候,要求他們提供官方的 5.4 版本支持還爲時尚早。(半年時間,Laravel 5.5 都已經發布了)github
這個產品雖然很新,但給我留下了深入的印象。它已經有一個大的粉絲團,在以前的 laravel 資訊中有提到過它,和它的 YouTube 開發視頻系列。數據庫
Voyager 擁有一個專業而且完美的界面,但主要的一點是,它只是工做。清晰的使用說明,友好的前端主題,沒有明顯的 bug 或未完成的部分。 Voyager 還擁有像船長的圖片或船輪圖標,使它看起來不錯的總體。bootstrap
另外一個明智的決定是有一個參數「虛擬數據」在安裝過程當中,你能夠有你的管理面板預填充數據使用。後端
Voyager 還用有一個媒體文件管理器,來處理你上傳的文件,這很是的方便,並幫助它在其餘的後臺管理建立者中脫穎而出。瀏覽器
最後,在 Voyager 的幫助下,你也能夠經過一個在你的後端應用程序中的 mini-phpMyAdmin
改變數據庫表,從而直接改變你的後臺管理面板。bash
總之,Voyager 彷佛是市場上最優雅的解決方案,但若是不支持或更新一段時間,這種狀況很容易發生變化,這種狀況常常發生在開源的擴展包中。
這是另外一個讓我印象深入的項目。安裝並登陸到你的管理面板後,你能夠直觀地建立 CURDs 模塊。據做者來說,這個模塊化的系統,是受到了 SugarCRM 的啓發。
僅僅經過幾回點擊,你能夠生成你的數據庫模型的遷移文件。若是你喜歡,你也能夠同時或者分開生成 CURD 模塊。
LaraAdmin 帶有至關多的預約義模塊,他們幫助你瞭解這個系統,可是,另外一方面,若是我要建立個人項目從零開始,這須要花些一些時間來對 LaraAdmin 進行默認配置。
和 Voyager 同樣,LaraAdmin 也擁有上傳文件功能。能夠說,她是你上傳文件的內部瀏覽器。
對於前端視圖,LaraAdmin 採用了一種很是受歡迎的主題 adminLTE。它其實是大多數管理面板構建者使用的,它成爲一種市場標準。
這個包是很是簡單的,安裝以後,您能夠建立 CRUD 模塊或非 CRUD 的菜單項,指定字段、角色和權限。它多是本文中全部擴展包中描述最少的工具。
對於 QuickAdmin 有一個重要的里程碑,它是一個在線版本的管理面板的工具而不是做爲一個現有項目 laravel 包,該生成器能夠爲你下載和使用整個 Laravel 項目。所以,您沒有任何包依賴關係,也不須要學習這個特定包的語法。
這個包介於可視化和非可視化工具二者之間的,生成器的一部分其實是可視化的,所以您能夠在管理面板內建立新的菜單項,但對於大多數過程,您必須手動編寫代碼,好比:
php artisan admin:make UserController --model=App\\User
$router->resource('users', UserController::class);
use Encore\Admin\Grid;
use Encore\Admin\Facades\Admin;
$grid = Admin::grid(Movie::class, function(Grid $grid){
複製代碼
這是視覺和基於代碼的生成器之間的根本區別,後者須要學習它們的語法、一些規則並堅持它們。若是你想在包上建立一些定製的東西,那可能很麻煩。然而,z-song 開發的擴展包是一個很好的做品。
它還提供了額外的功能,如模型網格、模型表單、模型樹,甚至是現成的小部件。
它有至關使人印象深入的生成器口號:「讓你的 API 和管理面板在幾分鐘內準備好」,因此他們首先強調 API,而不是管理面板。爲此,他們有一個單獨的 API 生成器,它能夠做爲管理面板的一部分,或者做爲獨立的一部分工做。不只如此,他們還將爲 API 生成詳細的註釋。
雖然 infyom 生成器不是可視化(infyom 聲稱他們在工做在 GUI 頁面之上的),它提供了三種不一樣的選項指定的增刪改查參數:控制檯、JSON 文件、或一個現有的數據庫表。是的,你能夠爲一個已經存在的表生成增刪改查模塊,是否是很酷?
這個生成器的一個有趣功能,它使用存儲模式生成代碼,因此您的控制器看起來以下所示:
class BookController extends AppBaseController
{
/** @var BookRepository */
private $bookRepository;
public function __construct(BookRepository $bookRepo)
{
$this->bookRepository = $bookRepo;
}
/**
* Display a listing of the Book.
*
* @param Request $request
* @return Response
*/
public function index(Request $request)
{
$this->bookRepository->pushCriteria(new RequestCriteria($request));
$books = $this->bookRepository->all();
return view('books.index')
->with('books', $books);
}
}
複製代碼
這多是一件很是好的事情,或許你不想使用這種存儲庫模式,以爲它太複雜了。可是採用這種模式有一個最大好處,infyom 能夠爲你生成測試案例代碼!
對於前端視圖,infyom 提供四種模板可供選擇:AdminLTE、 Metronic、Bootstrap、以及 FlatLab.
使用 infyom 最大的問題(與大多數非視覺生成器),是你必須嚴格遵照他們的規則語法。清楚他們的文檔:「仔細閱讀文檔指定的特定輸入,可是若是你使用了錯誤的參數,這個生成器會像魔術同樣工做。
這個包有兩個產品,一個獨立的增刪改查生成器,和一個 laravel 後臺管理包。它的官方文檔說的要求 laravel 5.1 和 5.3 版本之間工做。
安裝後,你能夠經過一個一個的 Artisan 命令獲得一個 bootstrap 默認主題,也能夠手動建立增刪改查模塊。
他們官方文件中的一個例子:
php artisan crud:generate Posts --fields="title#string; content#text; category#select#options=technology,tips,health" --view-path=admin --controller-namespace=Admin --route-group=admin
若是這對你來講太難了,你能夠在 JSON 文件中提供字段細節,而後將其指定爲命令的參數。
您也能夠單獨生成不一樣的文件,以下所示:
php artisan crud:controller PostsController --crud-name=posts --model-name=Post --view-path="directory" --route-group=admin
php artisan crud:model Post --fillable="['title', 'body']"
生成增刪改查後,而後你指定的全部細節,本身在代碼裏把菜單項,什麼中間件、角色使用等等。因此,這個生成器會爲你的管理面板作不少部分工做。
這其實是一個龐大的項目,它不只僅是構建於一個管理面板之上的,它還有一個方便的單獨包結構:基礎,增刪改查 日誌管理器,後臺管理器等。做者稱這個擴展包適用於創業者的各類演示網站,以及複雜的 Web 應用程序。
提示:Backpack 使用案例已經在以前的 laravel資訊文章中有提到。
除了增刪改查生成器,它已經預先構建的增刪改查模塊包含:權限管理、設置、頁面管理、新聞管理、菜單管理。另外,Backpack 中的一些包能夠做爲擴展:日誌、備份和其餘一些功能能夠很容易地添加到應用程序中。
Backpack 的問題是它的嚴格,其嚴格要描述這樣,全部在您的控制器代碼的增刪改查功能,它可能看起來像這樣:
class TagCrudController extends CrudController {
public function setup() {
$this->crud->setModel("App\Models\Tag");
$this->crud->setRoute("admin/tag");
$this->crud->setEntityNameStrings('tag', 'tags');
$this->crud->setColumns(['name']);
$this->crud->addField([
'name' => 'name',
'label' => "Tag name"
]);
}
複製代碼
雖然在控制器方法中設置全部東西看起來很方便,可是若是您想在它上面構建任何定製的東西,您將不得不本身「破解」 Backpack 擴展包。公平地說,這適用於本系列中的大多數包,您必須處理依賴項,Backpack 擴展包是這裏擴展包最嚴格的一個。
值得一提的是 Backpack 擴展包難免費用於商業用途,做者用一種人類友好的方式說:「你使用這個擴展包就是應該去掙錢的,而不是免費的去工做」(這個擴展包收費19美圓)。
這多是這篇文章中最古老的包之一,但這個包仍然積極在維護,它是由一家俄羅斯公司建立的,您能夠在文檔的某些部分看到俄羅斯語言,在這裏和那裏提交消息和其餘文本。但這並不妨礙實際使用 sleepingowl 擴展包,它是很是強大的。
一樣在其餘狀況下,這個擴展包的使用語法至關嚴謹,這是如何在 sleepingowl 中添加一個菜單的例子:
Admin::menu()->url('/')->label('Start Page')->icon('fa-dashboard')->uses('\App\HTTP\Controllers\AdminController@getIndex');
Admin::menu(\App\User::class)->icon('fa-user');
Admin::menu()->label('Subitems')->icon('fa-book')->items(function ()
{
Admin::menu(\Acme\Models\Bar\User::class)->icon('fa-user');
Admin::menu(\Acme\Models\Foo::class)->label('my label');
});
複製代碼
這裏的另外一個缺點是包的文件彷佛過期了一點,而不是 相似於 admin:install
這樣的 sleepingowl:install
Artisan 命令行安裝。在這個擴展包中,還能夠找到更多關於這種不一致的例子。
你能夠考慮用這八個擴展包,來生成你的後臺管理面板。除了這些,還有五個沒有全面的審查的擴展包。
我測試了兩個未能交付的包:
xxxx_id
、id_xxxx
之類的 。最後,還有三個優質的包選擇於 CodeCanyon。我不能提供不少關於他們的信息,因此我留下來給大家檢查(我想做者是不肯意再花錢了(@^_^@),下面都是收費的擴展包,並且是美圓!):
接下來就寫完了,這些都是可行的選擇,我發現建立你的 laravel 管理面板(幾乎)不用寫代碼。
這是一篇譯文,原文地址是 https://laravel-news.com/13-laravel-admin-panel-generators. 英語好的小夥伴,能夠直接去看原文。
文章中提到的擴展包我基本都有用過,尤爲是 Z-song 開發的 Laravel-admin,在接下來更新的文章中,我會再詳細去寫這些擴展包的優勢和缺點。
個人英文水平有限,翻譯的內容會稍有誤差,但願小夥伴們多多包涵。