基础框架 - 后端管理系统
路由
路由提供者Provider中预定义两个路由
- bside 代表B端用户访问路由 完整路由:{{url}}/a/xxx
- aside 代表管理员访问路由 完整路由:{{url}}/b/xxx
枚举
使用插件bensampo/laravel-enum 版本4 github地址:https://github.com/BenSampo/laravel-enum/blob/v4.2.0/README.md
- 创建枚举类 : php artisan make:enum ”文件名“
- 给枚举类生成注释: php artisan enum:annotate "文件名"
- 如有翻译本地化需求,在 resources/lang/zh-CN/enums.php文件中中文翻译,英文语言包不用写,会自动翻译键名
- 在验证器中使用 : '参数名' => ['required ', new EnumValue(CaptchaType::class)],(或者按照键名new EnumKey)
- 可参考Enums/Common/Common.php枚举类
状态码
- 该系统所有状态码都定义在 App\Enums\Commom\Code枚举类中
- 大大类 和 大类不能变动 ,以大类为基准步长为100,根据业务自定义状态码
中间件
- 登录验证中间件 ”loginauth“
- Bside路由默认已经使用的中间件组为bside
- Aside路由默认已经使用的中间件组为aside
参数加密
- .env文件中有三个配置,其中iv必须是八位
- 参数加密不开启的时候,前端正常传入参数,是明文不安全
控制器
- 各个端控制器目录:App\Http\Controllers\XXXside
- BaseController基础控制器,需要被其他控制器继承
- 控制器中只需要干三件事情:
第一,验证参数(如果注入了自定义验证Request就可以省略$request->validate这一步)
第二,调用逻辑层Logic
第三,success返回---错误直接走异常处理
请求and响应
- 控制器方法注入请求Illuminate\Http\Request或者注入自定义请求表单
- 创建请求表单: php artisan make:request 文件名
- 请求表单中定义,用户是否有权限请求以及参数验证规则
- 控制器中调用request->validated()
- 响应只能调用BaseController的success()方法 > 注意!全站返回不能编写自定义的message,只能通过Code码
逻辑层
- App\Http\Logic逻辑层只能被控制器调用
- 要继承基类BaseLogic,return 使用基类定义的方法 ## 错误截获
- 自定义某端全局异常:App\Exceptions\XXXsideGlobalException,throw new XXXsideGlobalException($code); 注意也只能传入Code码
注意!.env文件APP_DEBUG控制是否显示详细错误信息,否则就按照本地化的错误码的message来显示
日志规范
- 配置文件logging.php中预定义了B端错误日志bside
- 日志格式:logs -> bside(端)-> 2022-06(年月)-> 日期_级别.log (预定义了两个级别 errors和info)
- errors错误日志会在异常抛出的时候自动记录,info手动调用
- 共工具类App\Utils\LogUtils 提供了两个方法errorBside,infoBside记录日志
数据迁移
- 每个版本的迭代如有数据结构修改,必须写到数据迁移里面
- 创建迁移 :php artisan make:migration create_users_table --create=users 或者 php artisan make:migration add_votes_to_users_table --table=users (--create是创建表 --table是编辑表)
- 编写迁移脚本
- 执行迁移: php artisan migrate
数据填充
- 每个版本的迭代如有数据预设置,必须写到数据填充里面
- 创建填充 : php artisan make:seeder 文件名
- 如果是简单的直接在seeder文件的run()方法中写insert
- 如果较复杂需要编写模型工厂:php artisan make:factory UserFactory
- 执行填充 : composer dump-autoload (用来重新生成composer映射) ,php artisan db:seed
Redis
- 配置文件database.php中的redis
- 所有使用到的键名需要在枚举类中定义:App\Enums\Common\RedisKey
- 工具类App\Utils\RedisUtils中提供了获取redis实例的方法
- traits文件App\Traits\RedisTraits中,定义了常用的redis方法,使用的时候只需要: use RedisTrait;