charsen / moo-scaffold
mooeen Scaffold for Laravel
Installs: 20
Dependents: 0
Suggesters: 0
Security: 0
Stars: 3
Watchers: 1
Forks: 0
Open Issues: 1
pkg:composer/charsen/moo-scaffold
Requires
- php: ^8.1
- brick/varexporter: ^0.5.0
- laravel/framework: ^10.10
- symfony/yaml: ^6.4
README
Dev Installing
$ composer config repositories.scaffold path ../packages/moo-scaffold $ composer require charsen/moo-scaffold:dev-master
Intro
“约定大于配置” 、“以机械化代替手工化作业”
支持多语言,默认 {en, zh-CN}
待补充... (可先按下面流程操作体验)
create new laravel
composer create-project --prefer-dist laravel/laravel "name"
修改配置 .env
- 开发域名
- 数据库配置 (需要手动先创建数据库)
通过 composer 安装
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
创建一个模块的 schema 文件
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
设置 cors 跨域设置
修改 config/cors.php 加入 后台路径
//... 'paths' => ['admin/*', 'api/*'], //...
路由设置
注册新方法 iResource
添加 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); }); } //...
配置 admin 路由对应的中件间
在 app/Http/Kernel.php 中添加
//... protected $middlewareGroups = [ //... 'admin' => [ \Illuminate\Routing\Middleware\SubstituteBindings::class, ], //... ]; //...
注册 admin 路由配置文件
于 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文件中的代码
更新 i18n 文件
php artisan moo:i18n
- 添加 --fresh刷新缓存数据,会先执行artisan moo:fresh
- 目前支持 英文、中文两个语种
- 可先润色 scaffold/database/_fields.yaml里的内容,此文件会自动根据数据表的字段,添加或删掉项目