V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sunshinev
V2EX  ›  程序员

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

  •  
  •   sunshinev ·
    sunshinev · 2020-05-07 10:20:34 +08:00 · 2545 次点击
    这是一个创建于 1659 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

    [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
    
    

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

    image

    生成 CRUD

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

    该操作会同时生成:

    • route
    • controller
    • views

    表单说明

    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,通过模块化的概念,来划分功能。

    85bce766f1a574d97ac931c8b98c29591576222771.jpg

    如何访问 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 数据库中拉取列表 135efc4b0abc7a7baf67793fb8de30901576222494.jpg

    文件对比

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

    image

    路由追加

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

    CRUD 后台效果

    列表页

    包含全面的增删查改功能

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

    a7124e651545e7f462e898ffb37704a41576223115.jpg

    删除+批量删除

    取消按钮放大,防止误删

    fa926f38e95888fd4a3c3aa055d202f41576223165.jpg

    行预览

    0b2b1603c043aec9b5cee84a17e26f291576223207.jpg

    编辑页面

    bc43b30f13de17e0a2a899a59f647d3a1576223248.jpg

    建议

    如果想用 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

    6 条回复    2020-05-07 20:46:42 +08:00
    guyeu
        1
    guyeu  
       2020-05-07 13:52:52 +08:00
    不是很懂这种东西的价值。。哪有那么多 CRUD 业务啊。。
    sunshinev
        2
    sunshinev  
    OP
       2020-05-07 14:12:46 +08:00
    @guyeu 实际上 PHP 做后台的场景很多的~ 而且最重要的是他生成的是单独页面,可以针对每个页面进行丰富的组件替换开发的,比如搞个进度条、搞个富文本,搞个图形啥的~很 6 的,关键是 laravel 的包,安装快捷方便~
    xingyuc
        3
    xingyuc  
       2020-05-07 16:16:19 +08:00
    CodeSmith 好像是生成通用代码的
    hackzx
        4
    hackzx  
       2020-05-07 18:34:59 +08:00
    在 laravel7 运行不正常,生成 CRUD 的页面显示 not found 。生成 model 的也生成不了
    zachlhb
        5
    zachlhb  
       2020-05-07 20:36:17 +08:00 via Android
    纯 curd 用 laravel-admin 就行了,方便快捷
    sunorg
        6
    sunorg  
       2020-05-07 20:46:42 +08:00 via Android
    来自 GII ? yii 时代就有了。的确不错
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1745 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:44 · PVG 00:44 · LAX 08:44 · JFK 11:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.