[扩展推荐] Laravel-Gii 快速创建基于 MySQL 表结构的 CRUD 后台
最终效果
Laravel Gii 为中小型项目快速创建管理后台,提供了一种新的可能。使用的过程中,你会发现很轻量,自由度很高,内部实现逻辑简单。
特别是熟悉iView的开发者,在通过Gii生成的页面上,可以根据自己的需求自定义页面,通过修改默认Input组件为其他功能丰富的iView组件,可以来构造更加复杂的管理页面。
你会发现它没有提供用户登录、权限功能,转而只是提供更加轻量化的页面创建,这点会让很多开发者们感到更加舒适,可以自由灵活的调整、自定义页面,来实现不同的能力。
感谢支持,欢迎在Issue提出意见
开始体验吧
[TOC]
原理
- 通过解析MySQL的数据表结构,来提取字段、以及类型,并填充到
stub
模板。 - 生成对应的Model、Observer、Controller、View、Route等相关项目文件。
- 根据MySQL表结构生成Model
- 根据Model生成Controller
官网
https://sunshinev.github.io/laravel-gii-ho...
注意
因为是解析MySQL的表结构,并且根据字段生成模板,所以目前生成的Model类时只支持MySQL,但是生成的CRUD管理后台,可以使用支持mongo和MySQL两种connection。
MySQL表结构请保证id
,created_at
,updated_at
三个字段必须存在。
安装
扩展包
Composer require sunshinev/laravel-gii -vvv
发布
该操作会发布assets静态文件,到public目录下
php artisan vendor:publish --tag laravel-gii
访问
在发布完成后,已经进行了路由的注册,可以通过下面的路由访问Gii页面
http:[domain]/gii/model
操作说明
生成Model模型
表单说明
- 表名称(支持下拉选择)
- Model类名(想要创建模型类,包含命名空间)
- 模型继承的父类(如果是Mongo可以继承
Jenssegers\Mongodb\Eloquent\Model
,MySQL用Illuminate\Database\Eloquent\Model
)
生成的文件列表,蓝色代表全新文件,红色代表已有文件但是存在不同,白色代表已有文件。
比如指定生成的Model命名空间为App\Models\Admin\Users
,那么生成的目录结构为:
.app
├── Models
│ └── Admin
│ ├── UsersModel.php
│ └── Users.php
└── Observers
└── Models
└── Admin
└── UsersObserver.php
通过上面的结构,我们可以发现命名空间与目录之间的关系。
生成CRUD
CRUD的创建,需要依赖之前创建的模型。
该操作会同时生成:
- route
- controller
- views
表单说明
- 控制器名称(包含命名空间)
- 之前创建的模型类
如果指定Controller的类为App\Http\Controllers\Admin\UsersController
,以及关联的Model为App\Models\Admin\Users
,那么生成的目录结构为:
app
├── Http
│ └── Controllers
│ └── Admin
│ ├── RenderController.php
│ └── UsersController.php
├── Models
│ └── Admin
│ ├── UsersModel.php
│ └── Users.php
└── Observers
└── Models
└── Admin
└── UsersObserver.php
以及生成的视图文件
.resources
└── views
└── admin
├── layouts
│ └── default.blade.php
└── users
├── create.blade.php
├── detail.blade.php
├── edit.blade.php
└── list.blade.php
通过上面的结构,我们可以发现命名空间与目录之间的关系。会发现admin
实际想当于modules
,通过模块化的概念,来划分功能。
如何访问CRUD?
CRUD的路由会自动添加到路由文件中,根据Controller的命名空间App\Http\Controllers\Admin\UsersController
会生成如下的路由,所以请直接访问路由
Route::get('/admin/layout', 'Admin\RenderController@index');
Route::get('/admin/layout/render', 'Admin\RenderController@render');
特性
MySQL列表加载
从配置的MySQL数据库中拉取列表
文件对比
工具会将新生成的文件与已存在的文件进行差异对比,方便查看修改部分,控制修改范围。
路由追加
新生成的页面,会自动追加到路由配置文件
CRUD后台效果
列表页
包含全面的增删查改功能
- 列表
- 分页
- 检索
- 删除+批量删除
- 预览
- 详情
- 编辑
删除+批量删除
取消按钮放大,防止误删
行预览
编辑页面
建议
如果想用Mongo怎么办?
如果生成完Model之后,默认的会使用env中配置的connection,如果需要调整,需要修改生成的Model文件。
// if connection is empty ,use default connection
protected $connection = '';
后台页面如何支持其他组件?
后台页面统一使用iview作为前端框架,目前支持iview4的所有组件,可直接在生成的blade模板文件中添加组件即可。
如何升级页面的iview组件?
生成的CRUD后台使用的是基于laravel-fe-render和base-fe 两个项目,其中base-fe
是Vue+iview的打包,如下:
import Vue from 'vue'
import ViewUI from 'view-design';
import 'view-design/dist/styles/iview.css';
Vue.use(ViewUI);
可以Fork base-fe
项目,然后进行iview升级,将生成的dist目录放到laravel-fe-render
项目的assets
目录,然后重新发布即可.
关于Gii的iview.min.js
请参考 https://github.com/sunshinev/ViewUI 项目,Fork后做了细微调整
相关资料
https://github.com/sunshinev/laravel-fe-re...
https://github.com/sunshinev/base-fe
https://github.com/sunshinev/laravel-gii
本作品采用《CC 协议》,转载必须注明作者和本文链接
高认可度评论:
这个……该不会是……参考了
Yii
的Gii
吧……这个……该不会是……参考了
Yii
的Gii
吧……@Tsukasa_Kanzaki 的确是参考了yii的gii工具,目前存在的code generator都是通过php artisan来实现。所以制作了GUI的版本。
我也想说, 这不就是...Yii的那啥
支持,希望以后越做越好
yii gii 很香
很吊的样子
@vimkid 还有很多不足的地方,多多指点~
@wujunze 是啊,换到laravel之后,之前的习惯没有gii总感觉不太方便
@MushishiXian 感谢支持~~有问题多多指点
@勺颠颠 哈哈,我们的目标是:能自动化的全自动化,不能自动化的,要半自动化~~
实际没什么卵用。后台界面肯定用vue 啥的 这个也是小项目用用咯 :joy:
又有人过来抢 Laravel-Admin 的饭碗了 坐在一旁的 Nova 表示: 抱歉 我是亲儿子
感觉还不错
不错 很6 啊
针对项目新发布了产品介绍网站
包含简单介绍以及Demo部分
看上去很棒,作者加油!
这玩意看着不错~
根据Issue进行了优化 https://github.com/sunshinev/laravel-gii/i...
In the latest tag V1.0.3, I have optimze the
ModelBusiness
by Doctrine Types. Now the properties looks likeAs we all know, the
datetime
,bigint
type is not php types. But it doesn't affect understanding2020年01月14日 官网Demo 环境遇到了一些问题,在执行CRUD的时候提示500,分析了一下,应该是之前demo用root并且cvm开启3306端口,导致数据库的用户权限和信息被恶意修改。
幸运的是,线上的Demo环境是基于容器的,包括数据库也是通过镜像生成可以快速重新构建。
目前环境已经恢复,并且更新到V1.0.2的版本。
顺手在V1.0.3的版本中,将左侧菜单,做了调整保持全部展开。
欢迎继续使用官网Demo进行体验 ^ ^
官方网站 https://sunshinev.github.io/laravel-gii-ho...
求解 @sunshinev
想不到项目竟然没有人喜欢用呀~
做后台前端如果支持element-ui就完美了啊
支持最高laravel版本和php版本?
8.0的安装失败 laravel版本有什么需求嘛