1. laravel-gii 可视化代码生成扩展开发
1.1. 目录
1.2. 安装 laravel7
1.3. 服务器要求
推荐使用
homestead
,假如你不使用Homestead
,请确保你的服务器满足以下要求:
PHP >= 7.2.5
BCMath
PHP 拓展Ctype
PHP 拓展Fileinfo
PHP 拓展JSON
PHP 拓展Mbstring
PHP 拓展OpenSSL
PHP 拓展PDO
PHP 拓展Tokenizer
PHP 拓展XML
PHP 拓展
1.4. 安装 laravel
1.4.1. 通过 Composer 创建项目
- 切换目录
cd ~/code
- 执行
composer create-project --prefer-dist laravel/laravel laravel-gii "7.*"
执行结果见下图:
1.4.2. homestead站点配置
- 进入 homestead 根目录
cd ~/Homestead
- 编辑 Homestead.yaml,sites 参数增加配置
sites:
- map: laravel-gii.test
to: /home/vagrant/code/laravel-gii/public
- 添加 host
sudo vim /etc/hosts
- 增加
192.168.11.10 laravel-gii.test
- 保存
:wq
- 重启 homestead
homestead provision && homestead reload
1.4.3. 访问
浏览器打开 http://laravel-gii.test/
1.5. laravel7 扩展开发步骤
1.5.1. 安装扩展
- 切换目录
cd ~/code/laravel-gii
- 执行命令
composer require jeroen-g/laravel-packager --dev
执行结果见下图:
1.5.2. 生成骨架
- 执行命令、生成骨架
php artisan packager:new gii laravel-gii --i
发现报错,如下图
- 屏蔽代码 vendor/symfony/process/Process.php:1201 行
// throw new ProcessTimedOutException($this, ProcessTimedOutException::TYPE_GENERAL);
代码修改见下图:
- 移除扩展
php artisan packager:remove gii laravel-gii
执行结果见下图:
- 重新执行,这里把 gii 改为 doujinya
php artisan packager:new doujinya laravel-gii --i
执行结果见下图:
- composer.json require 增加
"doujinya/laravel-gii": "dev-master"
执行结果见下图:
- 执行
composer update doujinya/laravel-gii -vvv
执行结果见下图:
1.5.4. 执行发布测试
执行命令
php artisan vendor:publish
选择 15,见下图
发现 config 目录下,多了一个 laravel-gii.php 文件
目录结构,扩展目录packages/doujinya/laravel-gii
,如下
1.5.5. 添加页面
- 编辑
packages/doujinya/laravel-gii/src/LaravelGiiServiceProvider.php
去掉$this->loadRoutesFrom(__DIR__.'/routes.php');
前的注释,加载路由- 增加路由文件
packages/doujinya/laravel-gii/src/routes.php
,内容如下
- 增加目录
packages/doujinya/laravel-gii/src/Controller
- 增加文件
packages/doujinya/laravel-gii/src/Controller/TestController.php
,内容如下
- 执行
composer dump-autoload
- 访问 http://laravel-gii.test/gii/test
1.6. sunshinev/laravel-gii 扩展
- github 地址:
https://github.com/sunshinev/laravel-gii
- 安装 laravel 5
composer create-project --prefer-dist laravel/laravel demo "5.*"
- 项目根目录执行
Composer require sunshinev/laravel-gii -vvv
- 发布资源
php artisan vendor:publish --tag laravel-gii
- 配置站点:同 1.4.2
- 生成model,访问 http://demo-gii.test/gii/model
- MySQL table name:选择
alarm_log
- Model name:填写
App\Models\AlarmLog
- Parent class name:填写
Illuminate\Database\Eloquent\Model
- 生成crud,访问 http://demo-gii.test/gii/crud
+Controller:输入
App\Http\Controllers\AlarmController
+Model name: 输入App\Models\AlarmLog
- 遇到的问题
- 前端依赖于
sunshinev/base-fe
项目create_at
update_at
不能自定义,需要手动修改代码model
和crud
生成表单,输入不人性化- 项目使用 iView4.0,需要改成 element-ui
- laravel版本
1.7.改造自己的laravel-gii
1.7.1 复制文件
复制文件,修改命名空间
目标扩展(基础目录vendor/sunshinev/laravel-gii) | 自己的扩展(基础目录packages/doujinya/laravel-gii) |
---|---|
src/routes/routes.php | src/routes/routes.php |
src/Controllers/CrudController.php | src/Controllers/CrudController.php |
src/Controllers/ModelController.php | src/Controllers/ModelController.php |
src/Business/ControllerBusiness.php | src/Models/BaseGenerate.php |
src/Business/GenerateBusiness.php | src/Models/ControllerGenerate.php |
src/Business/ModelBusiness.php | src/Models/ModelGenerate.php |
aravel-gii/src/views | src/views |
src/assets | resources/assets |
src/stubs | resources/stubs |
1.7.2 增加配置文件
修改 packages/doujinya/laravel-gii/config/laravel-gii.php
,代码如下,model
和crud
表单select
选择的默认配置
[
'App\Models',
'App\Models\Admin'
],
//base_model_default
'base_model_defaults'=>[
'Illuminate\Database\Eloquent\Model',
],
//create_at default
'create_at_defaults'=>[
'create_time',
'create_at',
''
],
//update_at default
'update_at_defaults'=>[
'update_time',
'update_at',
''
],
/*******************crud generate config ************************/
'controller_namespaces'=>[
'App\Http\Controllers',
'App\Http\Controllers\Admin'
],
'model_base_path'=>[
'app/Models'=>'App\Models',
'app/Models/Admin'=>'App\Models\Admin'
],
];
1.7.3 访问gii页面
/Users/doujinya/code/test-gii/packages/skyyouare/laravel-gii/composer.json
require
参数增加
"sebastian/diff": "^3.0",
"doctrine/dbal": "^2.10"
composer update -vvv
packages/skyyouare/laravel-gii/src/GiiServiceProvider.php
下boot
方法文件增加$this->loadViewsFrom(__DIR__.'/views', 'gii_views');
bootForConsole
方法增加
$this->publishes([
__DIR__.'/../resources/assets' => public_path('gii_assets'),
], 'gii.views');
执行命令
php artisan vendor:publish
选择 16 laravel-gii.views
1.7.4 其他资源发布同上
参考已发布的扩展源码
https://github.com/skyyouare/laravel-gii
1.7.5 发布资源,见 packages/doujinya/laravel-gii/src/LaravelGiiServiceProvider.php
/**
* Console-specific booting.
*
* @return void
*/
protected function bootForConsole(): void
{
// Publishing the configuration file.
$this->publishes([
__DIR__.'/../config/laravel-gii.php' => config_path('laravel-gii.php'),
], 'laravel-gii.config');
// Publishing assets.
$this->publishes([
__DIR__.'/../resources/assets' => public_path('gii_assets'),
], 'laravel-gii.views');
// Publishing images.
$this->publishes([
__DIR__.'/../resources/images' => public_path('images'),
], 'laravel-gii.images');
// Publishing js.
$this->publishes([
__DIR__.'/../resources/js' => base_path('resources/js'),
], 'laravel-gii.js');
// Publishing blade.
$this->publishes([
__DIR__.'/../resources/blade' => base_path('resources/views'),
], 'laravel-gii.blade');
// Publishing sass.
$this->publishes([
__DIR__.'/../resources/sass' => base_path('resources/sass'),
], 'laravel-gii.sass');
//publishing controller
$this->publishes([
__DIR__.'/../resources/controllers' => base_path('app/Http/Controllers'),
], 'laravel-gii.controller');
//publishing request
$this->publishes([
__DIR__.'/../resources/Requests' => base_path('app/Http/Requests'),
], 'laravel-gii.request');
//publishing route
$this->publishes([
__DIR__.'/../resources/routes' => base_path('routes'),
], 'laravel-gii.route');
//exception route
$this->publishes([
__DIR__.'/../resources/Exceptions' => base_path('app/Exceptions'),
], 'laravel-gii.exception');
//publishing provider
$this->publishes([
__DIR__.'/../resources/Providers' => base_path('app/Providers'),
], 'laravel-gii.provider');
// Registering package commands.
// $this->commands([]);
}
1.8 使用
1. composer require laravel/ui ^2.1 --dev -vvv
2. php artisan ui vue
3. npm install
4. npm install element-ui vue-router qs --save-dev
5. php artisan vendor:publish --tag laravel-gii.config --tag laravel-gii.views --tag laravel-gii.images --tag laravel-gii.js --tag laravel-gii.blade --tag laravel-gii.sass --tag laravel-gii.controller --tag laravel-gii.request --tag laravel-gii.route --tag laravel-gii.exception --tag laravel-gii.provider --force
6. 运行 npm run watch-poll 编译
1.9 把你的项目放到 GitHub 上
当你的代码库准备就绪后,可以到包目录下初始化一个 Git 仓库。
cd packages/doujinya/laravel-gii
git init
git add .
git commit -m "first commit"
创建一个 新 GitHub 仓库 并且添加 origin.
git remote add origin [email protected]:yourusername/yourrepository.git
git push -u origin master
git tag -a 1.0.0 -m "release: First version"
git push --tags
2.0 把你的项目放到 Packagist 上
首先,在 Packagist.org 网站注册。我更喜欢使用我的 GitHub 帐户进行注册。
然后使用此 URL 提交新软件包。输入你的包的 GitHub URL,然后单击 Check. 如果发生任何错误,请按照屏幕上的说明进行操作。
完成上一步后,你将跳转到你的包的 packagist 页面,在该页面上你可能会收到如下通知:
此软件包不会自动更新。请为 Packagist 设置 GitHub Service Hook 以便在你每次推送时更新它!
让我们来设置一下。在此 页面 上获取 API 令牌,然后访问你的包的 GitHub 页面,找到 设置 / 网络钩子和服务 / 添加新服务 界面。搜索 Packagist,输入你的名字和令牌,然后点击提交。在 Packagist 页面上显示的错误应该会在 5–10 分钟内消失。
恭喜,你有一个有效的软件包在线,现在你可以通过 composer 引用它了。
2.1. 附录
laravel7 文档:https://learnku.com/docs/laravel/7.x
laravel7扩展开发:https://zhuanlan.zhihu.com/p/140687763
参考扩展:https://github.com/sunshinev/laravel-gii
完成扩展:https://github.com/skyyouare/laravel-gii