$ composer config repositories.scaffold path ../packages/moo-scaffold
$ composer require charsen/moo-scaffold:dev-master
“约定大于配置” 、“以机械化代替手工化作业”
支持多语言,默认 {en, zh-CN}
待补充... (可先按下面流程操作体验)
composer create-project --prefer-dist laravel/laravel "name"
- 开发域名
- 数据库配置 (需要手动先创建数据库)
composer require --dev charsen/moo-scaffold
通过命令行看是否安装成功 Scaffold
php artisan list
看到结果中有 scaffold , moo:api ... 等就是已经安装成功
php artisan moo:init "Charsen <https://github.com/charsen>"
- 将会发布
scaffold.php
到config
目录下.
php artisan vendor:publish --provider=Mooeen\\Scaffold\\ScaffoldProvider --tag=config
php artisan moo:schema `module_name`
- 添加
-f
覆盖已存在文件 - PS1: 暂不支持多级目录!建议:
module_name = schema_file_name
- PS2:
controller
的定义,只支持app/Http/Controllers/
往下 两级,更深的层级 不支持!!!
将会生成 schema
文件 + ./scaffold/database/<module_name>.yaml
设计模块下的数据表,- 具体说明详见 demo:
php artisan moo:migration `schema_file_name`
schema_file_name
非必写,若不写会有提示做选择- 添加
-m
会执行php artisan migrate
- 添加
--fresh
刷新缓存数据,会先执行artisan moo:fresh
前置动作:再 DataBaseSeeder.php 中加入 //:auto_insert_code_here::do_not_delete ,一遍生成代码时
php artisan moo:model `schema_file_name`
schema_file_name
非必写,若不写会有提示做选择- 默认生成 Trait 文件
- 添加
-f
覆盖已存在文件 model 和 factory 文件 - 添加
-F
生成对应的factory
文件,并更新到database/seeds/DatabaseSeeder.php
修改 config/cors.php
加入 后台路径
//...
'paths' => ['admin/*', 'api/*'],
//...
添加 route
的 iResource
方法,于 app/Providers/RouteServiceProvider.php
文件中:
//...
public function boot()
{
//
$this->registerMacros();
parent::boot();
}
//...
protected function registerMacros()
{
Route::macro('iResource', 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/Http/Kernel.php
中添加
//...
protected $middlewareGroups = [
//...
'admin' => [
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
//...
];
//...
于 app/Providers/RouteServiceProvider.php
文件中,添加:
//...
public function map()
{
$this->mapApiRoutes();
$this->mapWebRoutes();
//
$this->mapAdminRoutes();
}
//...
protected function mapAdminRoutes()
{
Route::prefix('admin')
->middleware('admin')
->group(base_path('routes/admin.php'));
}
//...
基础控制器支持自定义,可修改 config/scaffold.php
中的配置;
php artisan moo:controller `app_name` `schema_file_name`
schema_file_name
非必写,若不写会有提示做选择- 添加
-f
覆盖已存在文件(Request 文件不会被覆盖,需要手动删除) - 同时会生成对应的
From Request
对象于app/Http/Requests/
路径下(目录层次与Controller
的一致) - 如果之前已经有 trait 文件了,并且存在 controller 文件,则不再生成 request 文件,避免删除了又重新生成
!!! PS: !!!
controller
里的action
是生成接口文档及调试
的依据,one action = one api
- 请先 认真 设置
From Request
里的验证规则,因为类里的验证规则是生成api
及表单控件
时的数据来源
生成接口测试 yaml
文件,后续调整 controller
时,若有删减会提示需要手动去掉 yaml
中对应的 action
,若有增加则会自动追加到 yaml
文件。
php artisan moo:api `namesapce`
namesapce
非必写,若不写会有提示做选择(app/controllers
下的某个目录,或多级目录)- 添加
-f
覆盖已存在文件 - 添加
-i
忽略用controller
里的actions
求交集 (见下方 PS2) - 添加
--fresh
刷新缓存数据,会先执行artisan moo:fresh
PS1:
- api 里的参数 默认通过
From Request
对象验证规则
里读取 - 默认的接口名称通过
"反射"
控制器中动作的注释来获取
PS2:
Route::iResource('departments', \App\Admin\Controllers\System\DepartmentController::class);
- 要先设置好路由规则,程序通过
Route::getRoutes()
获取接口地址(但由于用了Route::resources
,实际action
可能没那么多) - 用路由与控制器的
actions
求交集,得出真实的接口 - 生成时:默认附加新的
action
到对应的接口yaml
文件, - 生成时:若有
action
被删减会提醒,需要手工删除
接口yaml
文件中的代码
php artisan moo:i18n
- 添加
--fresh
刷新缓存数据,会先执行artisan moo:fresh
- 目前支持
英文
、中文
两个语种 - 可先润色
scaffold/database/_fields.yaml
里的内容,此文件会自动根据数据表的字段,添加或删掉项目