[扩展推荐] Laravel-Gii 快速创建基于 MySQL 表结构的 CRUD 后台

最终效果

Laravel-Gii 如何快速创建基于 MySQL 表结构的 CRUD 后台?

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-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模型

表单说明

  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-re...

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

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

本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 4年前 自动加精
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 25

这个……该不会是……参考了YiiGii吧……

4年前 评论

这个……该不会是……参考了YiiGii吧……

4年前 评论

@Tsukasa_Kanzaki 的确是参考了yii的gii工具,目前存在的code generator都是通过php artisan来实现。所以制作了GUI的版本。

4年前 评论
sunshinev (作者) (楼主) 4年前
ThinkQ 4年前
ThinkQ 4年前
sunshinev (作者) (楼主) 4年前

我也想说, 这不就是...Yii的那啥

4年前 评论
sunshinev (楼主) 4年前

支持,希望以后越做越好

4年前 评论

yii gii 很香

4年前 评论

@vimkid 还有很多不足的地方,多多指点~

4年前 评论

@wujunze 是啊,换到laravel之后,之前的习惯没有gii总感觉不太方便

4年前 评论

@MushishiXian 感谢支持~~有问题多多指点

4年前 评论

@勺颠颠 哈哈,我们的目标是:能自动化的全自动化,不能自动化的,要半自动化~~

4年前 评论

实际没什么卵用。后台界面肯定用vue 啥的 这个也是小项目用用咯 :joy:

4年前 评论
sunshinev (楼主) 4年前

又有人过来抢 Laravel-Admin 的饭碗了 坐在一旁的 Nova 表示: 抱歉 我是亲儿子

4年前 评论
sunshinev (楼主) 4年前

感觉还不错

4年前 评论
sunshinev (楼主) 4年前

不错 很6 啊

4年前 评论
sunshinev (楼主) 4年前

针对项目新发布了产品介绍网站

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

包含简单介绍以及Demo部分

  • Gii操作的Demo
  • CRUD生成效果

file

4年前 评论

看上去很棒,作者加油!

4年前 评论
sunshinev (楼主) 4年前
xujun0429

这玩意看着不错~

4年前 评论

根据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 like

/**
* @property bigint $id
* @property string $name
* @property string $email
* @property string $email_verified_at
* @property string $password
* @property string $remember_token
* @property datetime $created_at
* @property datetime $updated_at
*/

As we all know, the datetime,bigint type is not php types. But it doesn't affect understanding

4年前 评论

2020年01月14日 官网Demo 环境遇到了一些问题,在执行CRUD的时候提示500,分析了一下,应该是之前demo用root并且cvm开启3306端口,导致数据库的用户权限和信息被恶意修改。

幸运的是,线上的Demo环境是基于容器的,包括数据库也是通过镜像生成可以快速重新构建。

目前环境已经恢复,并且更新到V1.0.2的版本。

顺手在V1.0.3的版本中,将左侧菜单,做了调整保持全部展开。

欢迎继续使用官网Demo进行体验 ^ ^

4年前 评论

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

特别是熟悉iView的开发者,在生成的页面上,可以根据自己的需求,自定义页面,将默认Input修改为其他功能丰富的iView组件

感谢支持 ^ ^

官方网站 https://sunshinev.github.io/laravel-gii-ho...

4年前 评论
创建 Model 没有问题
App\Models\Admin\Users
Illuminate\Database\Eloquent\Model
创建 CURD 报错
App\Http\Controllers\Admin\UsersController
App\Models\Admin\Users
报错信息
Class 'App\Models\Admin\Users' not found 
vendor/sunshinev/laravel-gii/src/Business/ControllerBusiness.php:95

求解 @sunshinev

4年前 评论
rebel (作者) 4年前
sunshinev (楼主) 3年前

想不到项目竟然没有人喜欢用呀~

3年前 评论

做后台前端如果支持element-ui就完美了啊

3年前 评论

支持最高laravel版本和php版本?

2年前 评论

8.0的安装失败 laravel版本有什么需求嘛

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!