“约定大于配置” 、“以机械化代替手工化作业”
支持多语言,默认 {en, zh-CN}
待补充... (可先按下面流程操作体验)
composer create-project --prefer-dist laravel/laravel "name"
- 开发域名
- 数据库配置 (需要手动先创建数据库)
composer require --dev charsen/laravel-scaffold
通过命令行看是否安装成功 Scaffold
php artisan list
看到结果中有 scaffold , scaffold:api ... 等就是已经安装成功
php artisan scaffold:init "Charsen <https://github.com/charsen>"
- 将会发布
scaffold.php
到config
目录下.
php artisan vendor:publish --provider=Charsen\\Scaffold\\ScaffoldProvider --tag=config
- 发布前端公共资源包到 public 目录下
php artisan vendor:publish --provider=Charsen\\Scaffold\\ScaffoldProvider --tag=public --force
在浏览器中打开 http://<domain>/scaffold
, 网页正常打开,样式正常显示(因没数据,其它链接进入时均提示出错)
php artisan scaffold:schema `module_name`
- 添加
-f
覆盖已存在文件 - PS1: 暂不支持多级目录!建议:
module_name = schema_file_name
- PS2:
controller
的定义,只支持app/Http/Controllers/
往下 两级,更深的层级 不支持!!!
将会生成 schema
文件 + ./scaffold/database/<module_name>.yaml
设计模块下的数据表,- 具体说明详见 demo:
在每次修改完 schema
文件后,均需要执行此命令,刷新缓存数据;
php artisan scaffold:fresh
- 添加
-c
清空数据后重建
http://<domain>/scaffold/db
- 字段名称会优先从
scaffold/database/_fields.yaml
读取
PS:
- 此时是很好的检查表设计的环节,表名、字段、类型等等;
- 及时调整后
artisan scaffold:fresh
,偶尔可以加入-c
会清掉错误的缓存文件。
php artisan scaffold:migration `schema_file_name`
schema_file_name
非必写,若不写会有提示做选择- 添加
-m
会执行php artisan migrate
- 添加
--fresh
刷新缓存数据,会先执行artisan scaffold:fresh
php artisan scaffold:model `schema_file_name`
schema_file_name
非必写,若不写会有提示做选择- 默认生成 Trait 文件
- 添加
-t
重新生成 Trait 文件(若 model 存在时需要覆盖更新) - 添加
-f
覆盖已存在文件 - 添加
--factory
同时生成对应的factory
文件,并更新到database/seeds/DatabaseSeeder.php
- 添加
--fresh
刷新缓存数据,会先执行artisan scaffold:fresh
创建 Resources
文件夹,路径:app/Http/Resources/
BaseResource
、FormWidgetCollection
、TableColumnsCollection
已存在于 scaffold
中,支持自定义配置,可修改 config/scaffold.php
中的配置,通过自定义路径后减低 scaffold
与业务系统的关联性;
代码见 BaseResource
基础控制器支持自定义,可修改 config/scaffold.php
中的配置;
php artisan scaffold:controller `schema_file_name`
schema_file_name
非必写,若不写会有提示做选择- 添加
-f
覆盖已存在文件(Request 文件不会被覆盖,需要手动删除) - 添加
--fresh
刷新缓存数据,会先执行artisan scaffold:fresh
- 同时会生成对应的
From Request
对象于app/Http/Requests/
路径下(目录层次与Controller
的一致) - 若
routes/admin.php
不存在,则会自动生成,存在会将此次的路由规则添加进去
!!! PS: !!!
controller
里的action
是生成接口文档及调试
的依据,one action = one api
- 请先 认真 设置
From Request
里的验证规则,因为类里的验证规则是生成api
及表单控件
时的数据来源
修改 config/cors.php
加入 后台路径
//...
'paths' => ['admin/*', 'api/*'],
//...
添加 route
的 resourceHasTrashes
方法,于 app/Providers/RouteServiceProvider.php
文件中:
//...
public function boot()
{
//
$this->registerMacros();
parent::boot();
}
//...
protected function registerMacros()
{
Route::macro('resourceHasTrashes', function($name, $controller) {
Route::get($name . '/trashed', $controller . '@trashed')->name($name . '.trashed');
Route::delete($name . '/forever/{id}', $controller . '@forceDestroy')->name($name . '.forceDestroy');
Route::delete($name . '/batch', $controller . '@destroyBatch')->name($name . '.destroyBatch');
Route::patch($name . '/restore', $controller . '@restore')->name($name . '.restore');
Route::resource($name, $controller);
});
}
//...
于 app/Providers/RouteServiceProvider.php
文件中,添加:
//...
public function map()
{
$this->mapApiRoutes();
$this->mapWebRoutes();
//
$this->mapAdminRoutes();
}
//...
protected function mapAdminRoutes()
{
Route::prefix('admin')
->middleware('admin')
->namespace($this->namespace)
->group(base_path('routes/admin.php'));
}
//...
在 app/Http/Kernel.php
中添加
//...
protected $middlewareGroups = [
//...
'admin' => [
'throttle:60,1',
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
//...
];
//...
先手动添加目录转换文件 scaffold/api/_menus_transform.yaml
###
# 转换 api 调试工具菜单
#
# 一个目录一行,显示时会按此顺序
##
'Index': '根目录'
'System': '系统管理'
生成接口测试 yaml
文件,后续调整 controller
时,若有删减会提示需要手动去掉 yaml
中对应的 action
,若有增加则会自动追加到 yaml
文件。
php artisan scaffold:api `namesapce`
namesapce
非必写,若不写会有提示做选择(app/controllers
下的某个目录,或多级目录)- 添加
-f
覆盖已存在文件 - 添加
-i
忽略用controller
里的actions
求交集 (见下方 PS2) - 添加
--fresh
刷新缓存数据,会先执行artisan scaffold:fresh
PS1:
- api 里的参数 默认通过
From Request
对象验证规则
里读取 - 可在
api
的yaml
配置文件中重写url_params
及body_params
来覆盖默认的参数设置 - 默认的接口名称通过
"反射"
控制器中动作的注释来获取 - api demo docs/api_demo.yaml
PS2:
Route::resourceHasTrashes('departments', 'Admin\\Personnels\\DepartmentController');
- 要先设置好路由规则,程序通过
Route::getRoutes()
获取接口地址(但由于用了Route::resources
,实际action
可能没那么多) - 用路由与控制器的
actions
求交集,得出真实的接口 - 生成时:默认附加新的
action
到对应的接口yaml
文件, - 生成时:若有
action
被删减会提醒,需要手工删除
接口yaml
文件中的代码
php artisan scaffold:i18n
- 添加
--fresh
刷新缓存数据,会先执行artisan scaffold:fresh
- 目前支持
英文
、中文
两个语种 - 可先润色
scaffold/database/_fields.yaml
里的内容,此文件会自动根据数据表的字段,添加或删掉项目
先关闭权限验证,config/scaffold.php
中
//...
'authorization' => [
// 是否开启 验证验证
'check' => FALSE,
//...
修改本地语言设置,config/app.php
中
//...
'locale' => 'zh-CN',
//...
- 在浏览器中打开
http://<domain>/scaffold/api
- 字段名称会优先从
scaffold/database/_fields.yaml
读取