项目作者: sunshinev

项目描述 :
Generate CRUD based on Mysql table structure Laravel Extension package
高级语言: PHP
项目地址: git://github.com/sunshinev/laravel-gii.git
创建时间: 2019-11-25T11:36:59Z
项目社区:https://github.com/sunshinev/laravel-gii

开源协议:GNU General Public License v3.0

下载


Laravel-Gii 可视化代码生成工具 CRUD +GUI

Packagist Version
Travis (.com)
GitHub last commit
GitHub
GitHub repo size
GitHub stars
GitHub forks

Laravel Gii 为中小型项目快速创建管理后台,提供了一种新的可能。使用的过程中,你会发现很轻量,自由度很高,内部实现逻辑简单。

特别是熟悉iView的开发者,在通过Gii生成的页面上,可以根据自己的需求自定义页面,通过修改默认Input组件为其他功能丰富的iView组件,可以来构造更加复杂的管理页面。

你会发现它没有提供用户登录、权限功能,转而只是提供更加轻量化的页面创建,这点会让很多开发者们感到更加舒适,可以自由灵活的调整、自定义页面,来实现不同的能力。

感谢支持,欢迎在Issue提出意见

开始体验吧

e1daf65668566cd8f7dd417211820a091576311651.jpg

原理

  1. 通过解析MySQL的数据表结构,来提取字段、以及类型,并填充到stub模板。
  2. 生成对应的Model、Observer、Controller、View、Route等相关项目文件。
  3. 根据MySQL表结构生成Model
  4. 根据Model生成Controller

官网

https://sunshinev.github.io/laravel-gii-home

注意

因为是解析MySQL的表结构,并且根据字段生成模板,所以目前生成的Model类时只支持MySQL,但是生成的CRUD管理后台,可以使用支持mongo和MySQL两种connection。

MySQL表结构请保证id,created_at,updated_at三个字段必须存在。

安装

扩展包

  1. Composer require sunshinev/laravel-gii -vvv

发布

该操作会发布assets静态文件,到public目录下

  1. php artisan vendor:publish --tag laravel-gii

访问

在发布完成后,已经进行了路由的注册,可以通过下面的路由访问Gii页面

  1. http:[domain]/gii/model

操作说明

生成Model模型

表单说明

  1. 表名称(支持下拉选择)
  2. Model类名(想要创建模型类,包含命名空间)
  3. 模型继承的父类(如果是Mongo可以继承Jenssegers\Mongodb\Eloquent\Model,MySQL用Illuminate\Database\Eloquent\Model

生成的文件列表,蓝色代表全新文件,红色代表已有文件但是存在不同,白色代表已有文件。

比如指定生成的Model命名空间为App\Models\Admin\Users,那么生成的目录结构为:

  1. .app
  2. ├── Models
  3. └── Admin
  4. ├── UsersModel.php
  5. └── Users.php
  6. └── Observers
  7. └── Models
  8. └── Admin
  9. └── UsersObserver.php

通过上面的结构,我们可以发现命名空间与目录之间的关系。

image

生成CRUD

CRUD的创建,需要依赖之前创建的模型。

该操作会同时生成:

  • route
  • controller
  • views

表单说明

  1. 控制器名称(包含命名空间)
  2. 之前创建的模型类

如果指定Controller的类为App\Http\Controllers\Admin\UsersController ,以及关联的Model为App\Models\Admin\Users,那么生成的目录结构为:

  1. app
  2. ├── Http
  3. └── Controllers
  4. └── Admin
  5. ├── RenderController.php
  6. └── UsersController.php
  7. ├── Models
  8. └── Admin
  9. ├── UsersModel.php
  10. └── Users.php
  11. └── Observers
  12. └── Models
  13. └── Admin
  14. └── UsersObserver.php

以及生成的视图文件

  1. .resources
  2. └── views
  3. └── admin
  4. ├── layouts
  5. └── default.blade.php
  6. └── users
  7. ├── create.blade.php
  8. ├── detail.blade.php
  9. ├── edit.blade.php
  10. └── list.blade.php

通过上面的结构,我们可以发现命名空间与目录之间的关系。会发现admin实际想当于modules,通过模块化的概念,来划分功能。

85bce766f1a574d97ac931c8b98c29591576222771.jpg

如何访问CRUD?

CRUD的路由会自动添加到路由文件中,根据Controller的命名空间App\Http\Controllers\Admin\UsersController会生成如下的路由,所以请直接访问路由

  1. Route::get('/admin/layout', 'Admin\RenderController@index');
  2. Route::get('/admin/layout/render', 'Admin\RenderController@render');

特性

MySQL列表加载

从配置的MySQL数据库中拉取列表
135efc4b0abc7a7baf67793fb8de30901576222494.jpg

文件对比

工具会将新生成的文件与已存在的文件进行差异对比,方便查看修改部分,控制修改范围。

image

路由追加

新生成的页面,会自动追加到路由配置文件
b58eb0bd955bafea27540d6227e611731576209355.jpg

CRUD后台效果

列表页

包含全面的增删查改功能

  • 列表
  • 分页
  • 检索
  • 删除+批量删除
  • 预览
  • 详情
  • 编辑

a7124e651545e7f462e898ffb37704a41576223115.jpg

删除+批量删除

取消按钮放大,防止误删

fa926f38e95888fd4a3c3aa055d202f41576223165.jpg

行预览

0b2b1603c043aec9b5cee84a17e26f291576223207.jpg

编辑页面

bc43b30f13de17e0a2a899a59f647d3a1576223248.jpg

建议

如果想用Mongo怎么办?

如果生成完Model之后,默认的会使用env中配置的connection,如果需要调整,需要修改生成的Model文件。

  1. // if connection is empty ,use default connection
  2. protected $connection = '';

后台页面如何支持其他组件?

后台页面统一使用iview作为前端框架,目前支持iview4的所有组件,可直接在生成的blade模板文件中添加组件即可。

iviewui文档

如何升级页面的iview组件?

生成的CRUD后台使用的是基于laravel-fe-renderbase-fe 两个项目,其中base-fe是Vue+iview的打包,如下:

  1. import Vue from 'vue'
  2. import ViewUI from 'view-design';
  3. import 'view-design/dist/styles/iview.css';
  4. 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-render

https://github.com/sunshinev/base-fe

https://github.com/sunshinev/laravel-gii