Laravel-Gii 可视化 CRUD 代码生成工具,程序员的福音啊~

2020-05-07 10:20:34 +08:00
 sunshinev

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

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

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

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

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

开始体验吧

[TOC]

原理

  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三个字段必须存在。

安装

扩展包

Composer require sunshinev/laravel-gii -vvv

发布

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

php artisan vendor:publish  --tag laravel-gii

访问

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

http:[domain]/gii/model

操作说明

生成 Model 模型

表单说明

  1. 表名称(支持下拉选择)
  2. Model 类名(想要创建模型类,包含命名空间)
  3. 模型继承的父类(如果是 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 的创建,需要依赖之前创建的模型。

该操作会同时生成:

表单说明

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

如果指定 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 模板文件中添加组件即可。

iviewui 文档

如何升级页面的 iview 组件?

生成的 CRUD 后台使用的是基于laravel-fe-renderbase-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-render

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

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

2376 次点击
所在节点    程序员
6 条回复
guyeu
2020-05-07 13:52:52 +08:00
不是很懂这种东西的价值。。哪有那么多 CRUD 业务啊。。
sunshinev
2020-05-07 14:12:46 +08:00
@guyeu 实际上 PHP 做后台的场景很多的~ 而且最重要的是他生成的是单独页面,可以针对每个页面进行丰富的组件替换开发的,比如搞个进度条、搞个富文本,搞个图形啥的~很 6 的,关键是 laravel 的包,安装快捷方便~
xingyuc
2020-05-07 16:16:19 +08:00
CodeSmith 好像是生成通用代码的
hackzx
2020-05-07 18:34:59 +08:00
在 laravel7 运行不正常,生成 CRUD 的页面显示 not found 。生成 model 的也生成不了
zachlhb
2020-05-07 20:36:17 +08:00
纯 curd 用 laravel-admin 就行了,方便快捷
sunorg
2020-05-07 20:46:42 +08:00
来自 GII ? yii 时代就有了。的确不错

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/669174

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX