13 个快速构建 Laravel 后台的扩展包
开发者们都是懒惰的,不,我不是在开玩笑,他们努力创建系统,帮助他们在未来避免更多的、尤其是重复性的工作。现在有一些相当优秀的例子,我们不需要在编写重复的代码,它将直接为我们生成。今天我们将会看到 Laravel 框架中的各式各样的后台管理面板、后端开发者创建的例子,它们可以节省我们多少时间呢?
Disclaimer: 我是 quickadminpanel
的创始人,一位创造者。回顾这个市场,这里确实有伟大的竞争对手,我尽可能做人要诚实和公正,他们应该得到友善的话语和尊重。
有两大类后台管理面板生成器:可视化构建器和基于命令行的。选择取决于您的偏好,是否喜欢使用 GUI
视图面板的,还是有参数的 Artisan
命令行的。
另外,这里一个重要的术语,知道 CRUD
这个缩写代表“创建、读取、更新、删除”这些操作基于所有的管理面板。一个 CRUD
通常代表一个菜单项的模型来管理数据。
重要通知:此文章写于 写于 2017 年 4 月 1号,下面所有的扩展包都是在 laravel 5.3 中测试的。在撰写本文的时候,要求他们提供官方的 5.4 版本支持还为时尚早。(半年时间,Laravel 5.5 都已经发布了)
可视化的后台管理面板
Voyager: The Missing Laravel Admin
Voyager这个产品虽然很新,但给我留下了深刻的印象。它已经有一个大的粉丝团,在之前的 laravel 资讯中有提到过它,和它的 YouTube 开发视频系列。
Voyager 拥有一个专业并且完美的界面,但主要的一点是,它只是工作。清晰的使用说明,友好的前端主题,没有明显的 bug 或未完成的部分。 Voyager 还拥有像船长的图片或船轮图标,使它看起来不错的整体。
另一个明智的决定是有一个参数“虚拟数据”在安装过程中,你可以有你的管理面板预填充数据使用。
Voyager 还用有一个媒体文件管理器,来处理你上传的文件,这非常的方便,并帮助它在其他的后台管理创建者中脱颖而出。
最后,在 Voyager 的帮助下,你也可以通过一个在你的后端应用程序中的 mini-phpMyAdmin
改变数据库表,从而直接改变你的后台管理面板。
总之,Voyager 似乎是市场上最优雅的解决方案,但如果不支持或更新一段时间,这种情况很容易发生变化,这种情况经常发生在开源的扩展包中。
LaraAdmin: Admin Panel + CRM
LaraAdmin这是另一个让我印象深刻的项目。安装并登录到你的管理面板后,你可以直观地创建 CURDs 模块。据作者来讲,这个模块化的系统,是受到了 SugarCRM 的启发。
仅仅通过几次点击,你可以生成你的数据库模型的迁移文件。如果你喜欢,你也可以同时或者分开生成 CURD 模块。
LaraAdmin 带有相当多的预定义模块,他们帮助你了解这个系统,但是,另一方面,如果我要创建我的项目从零开始,这需要花些一些时间来对 LaraAdmin 进行默认配置。
和 Voyager 一样,LaraAdmin 也拥有上传文件功能。可以说,她是你上传文件的内部浏览器。
对于前端视图,LaraAdmin 采用了一种非常受欢迎的主题 adminLTE。它实际上是大多数管理面板构建者使用的,它成为一种市场标准。
QuickAdmin: 在线生成器的扩展包
QuickAdmin这个包是非常简单的,安装之后,您可以创建 CRUD 模块或非 CRUD 的菜单项,指定字段、角色和权限。它可能是本文中所有扩展包中描述最少的工具。
对于 QuickAdmin 有一个重要的里程碑,它是一个在线版本的管理面板的工具而不是作为一个现有项目 laravel 包,该生成器可以为你下载和使用整个 Laravel 项目。因此,您没有任何包依赖关系,也不需要学习这个特定包的语法。
非可视化的后台管理面板
Z-song / Laravel-admin
Laravel-admin这个包介于可视化和非可视化工具两者之间的,生成器的一部分实际上是可视化的,因此您可以在管理面板内创建新的菜单项,但对于大多数过程,您必须手动编写代码,比如:
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 开发的扩展包是一个很好的作品。
它还提供了额外的功能,如模型网格、模型表单、模型树,甚至是现成的小部件。
InfyOm Laravel Generator
InfyOm Laravel Generator它有相当令人印象深刻的生成器口号:“让你的 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 最大的问题(与大多数非视觉生成器),是你必须严格遵守他们的规则语法。清楚他们的文档:“仔细阅读文档指定的特定输入,但是如果你使用了错误的参数,这个生成器会像魔术一样工作。
AppzCoder: 增删改查生成器 + 后台管理面板
AppzCoder这个包有两个产品,一个独立的增删改查生成器,和一个 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']"
生成增删改查后,然后你指定的所有细节,自己在代码里把菜单项,什么中间件、角色使用等等。所以,这个生成器会为你的管理面板做很多部分工作。
Backpack for Laravel
这实际上是一个庞大的项目,它不仅仅是构建于一个管理面板之上的,它还有一个方便的单独包结构:基础,增删改查 日志管理器,后台管理器等。作者称这个扩展包适用于创业者的各种演示网站,以及复杂的 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 Admin
SleepingOwl这可能是这篇文章中最古老的包之一,但这个包仍然积极在维护,它是由一家俄罗斯公司创建的,您可以在文档的某些部分看到俄罗斯语言,在这里和那里提交消息和其他文本。但这并不妨碍实际使用 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 命令行安装。在这个扩展包中,还可以找到更多关于这种不一致的例子。
你可以考虑用这八个扩展包,来生成你的后台管理面板。除了这些,还有五个没有全面的审查的扩展包。
我测试了两个未能交付的包:
-
CrudBooster 它由一些手动修复工作,但文件是难以理解(可能是用谷歌翻译,作者是来自印度尼西亚),我也不喜欢作者的一些建议,如使用字段名称
xxxx_id
、id_xxxx
之类的 。 - Zofe / Rapyd-Laravel 不幸的是,它没有在 Laravel 5.3 中工作,写这篇文章的时候他们正在更新,根据他们的自述,最新支持的版本是5.2。
最后,还有三个优质的包选择于 CodeCanyon。我不能提供很多关于他们的信息,所以我留下来给你们检查(我想作者是不愿意再花钱了(@_@),下面都是收费的扩展包,而且是美元!):
- Laravel CRUD – CMS – Sximo 5 LTS($24)
- Josh – Laravel Admin Template + Front End + CRUD($25)
- Admin Architect – Administration Framework for Laravel ($29)
接下来就写完了,这些都是可行的选择,我发现创建你的 laravel 管理面板(几乎)不用写代码。
- 作者 PovilasKorop 写于 2017 年 4 月 1号
- 译者 angkee
这是一篇译文,原文地址是 https://laravel-news.com/13-laravel-admin-panel-generators. 英语好的小伙伴,可以直接去看原文。
文章中提到的扩展包我基本都有用过,尤其是 Z-song 开发的 Laravel-admin,在接下来更新的文章中,我会再详细去写这些扩展包的优点和缺点。
我的英文水平有限,翻译的内容会稍有偏差,希望小伙伴们多多包涵。