51

GitHub - ElapseAnnals/LaravelPlus: 基于 Laravel 扩展改造,为方便实际业务使用

 4 years ago
source link: https://github.com/ElapseAnnals/LaravelPlus
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

README.md

English | 中文

68747470733a2f2f6c61726176656c2e636f6d2f6173736574732f696d672f636f6d706f6e656e74732f6c6f676f2d6c61726176656c2e737667Plus

php-badge laravel-badge Build Status 68747470733a2f2f706f7365722e707567782e6f72672f656c617073652d616e6e616c732f6c61726176656c2d706c75732f762f737461626c65 68747470733a2f2f706f7365722e707567782e6f72672f656c617073652d616e6e616c732f6c61726176656c2d706c75732f646f776e6c6f616473 68747470733a2f2f706f7365722e707567782e6f72672f656c617073652d616e6e616c732f6c61726176656c2d706c75732f762f756e737461626c65 License composer.lock

介绍

LaravelPlus 基于 Laravel 增加部分软件包初始安装和进行业务使用功能改动,来创建一个开箱即用的应用

目的

为了减少重复 CURD 和新项目的配置麻烦等问题,如:

  • 现有的 infyomlabs/laravel-generator CODE 生成工具虽然好用,但是不太喜欢样式和代码结构。
  • 有些本地,测试,线上的配置需要频繁改动的需要。
  • 多个项目构建引入包,配置扩展等重复性操作
  • 基于 ReactPHP 多进程使用

版本基础

待完成 Todo List 后,考虑与 Laravel 中版本号一致

当前稳定版本:68747470733a2f2f706f7365722e707567782e6f72672f656c617073652d616e6e616c732f6c61726176656c2d706c75732f762f737461626c65

当前版本基于

PHP Laravel >=7.1.3 >=5.8

文档

具体 Wiki (待完善)

项目使用

1.下载项目

// A. github (推荐)
$ git clone https://github.com/ElapseAnnals/LaravelPlus.git   
$ git checkout v5.8.0 // 切换至当前最新稳定版本

// B. composer
$ composer create-project elapse-annals/laravel-plus
$ mv laravel-plus  LaravelPlus

2.复制项目

//  A.在当前目录运行自动复制脚本 (推荐)
$ php LaravelPlus/create YourProject

//  B.在当前目录手动复制项目至自身项目
$ cd LaravelPlus
$ rm composer.lock
$ rsync -av --exclude  . --exclude  .. --exclude  .git/ --exclude  vendor/ --exclude  .github/ LaravelPlus/* YourProject             
					//  为消除对称  */         
$ cd YourProject
$ rm composer.lock .env .travis
$ cp .env.example .env   

3.项目初始化

$ cd YourProject //  进入 YourProject 项目中
$ composer install   // 安装依赖软件包 (请先已安装 composer )
$ php artisan key:generate    // 更新 key
$ php artisan vendor:publish // 发布扩展包的资源
$ php artisan migrate  // 迁移数据库

// 以下非必须
$ php artisan storage:link // 图片资源软连接映射
$ php artisan clear-compiled // 清理编译
$ php artisan ide-helper:generate // 生成 ide 辅助提示
$ php artisan vendor:publish --provider="Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider" --tag=config // 加入配置
$ php artisan ide-helper:meta  // 生成 PHPStorm 辅助提示(重启 PHPStorm)
$ php artisan ide-helper:models //  生成模型辅助提示

Tips:

  1. 兼容 laravel-plus 目录名

功能使用说明

创建分层脚本和资源映射:想法来源

framework 脚本创建内容:

  • Controller, Service, Repository 等文件和对应关联关系
  • Route 资源路由增加
  • Controller 中资源类型代码和模型数据处理(开发中)

直接使用本项目内容(推荐)

 $ php artisan make:framework Test  // 创建分层结构(推荐)
 $ php artisan make:framework Test --basis  // 创建系统分层和主要分层结构(Controller, Service, Repository)
 $ php artisan make:framework Test --D // 删除分层结构 

或引入 php-tool/laravel-plus-make Laravel Plus Make 插件软件包(更新进度略慢本项目)

$ composer require php-tool/laravel-plus-make

效果图: image

Tips:

  • 注意文件被其它服务占用问题,可进行重启尝试 (Failed to clear cache. Make sure you have the appropriate permissions.)
热切换配置使用(config/dynamic/)

在 .env 中设置 ENABLE_HOT_SWITCHING=true 后,会在 AppServiceProvider 进行 dynamic 映射(对性能有一定影响,慎用)

使用方式:

<?php
$env = config('dynamic.env');

dynamic 目录文件说明

  • production 生产环境 (必须配置)
  • develop 开发环境 (必须配置,以下配置继承 develop 配置)
    • test 测试环境
    • local 本地环境
    • simulation 仿真环境

Tips:

  1. .env 配置 DYNAMIC_IS_STRICT 控制热配是否严格模式(默认 false 关闭)
    • 严格模式下不会继承 production/develop,完全采用当前环境配置
  2. 默认在继承基础上有重复属性,会覆盖继承项
  3. 继承基础特有属性会被携带至当前配置
  4. config/dynamic.php 为 IDEA 提示文件,使用空 key 即可

优化默认路由中闭包

  • 路由中禁止使用闭包,如有需要请在 ClosureController 中注册
缓存清理
  • php artisan optimize:clear // (慎用)
    • php artisan view:clear
    • php artisan cache:clear // 应用程序缓存清理(慎用- 会清理 config.cache 中启用缓存(file/db/redis 等))
    • php artisan route:cache
    • php artisan config:clear
    • php artisan clear-compiled // 清理编译 php artisan debug:clear
本地服务开启
php artisan serve
数据库迁移

设置数据工厂填充中文配置

use Faker\Factory as Factory;

$  $faker = Factory::create('zh_CN');
多进程使用

通过 MainProcess 控制 ChildProcess 进程(仅能在 CLI 模式下运行)

定时执行在 Console/Kernel.php 中 schedule 配置

运行流程

MainProcess(主进程调度) => MainProcessController(主进程执行任务,拆分子进程) => 
ChildProcess(子进程调度) => ChildProcessController (子进程任务) =>
  MainProcessController(接收子进程) => MainProcess(主进程结束)

业务任务名

$this->business_name

主进程业务逻辑和数据请求

new \App\Http\Controllers\{$this->business_name}Action())->getData();

new \App\Http\Controllers\{$this->business_name}Action())->run();

子进程运行业务逻辑

(new \App\Http\Controllers\{$this->business_name}ProcessAction()->run();

性能优化(只建议生产环境使用)

  • php artisan optimize // 类映射加载优化(该命令会自动缓存 config/route)
    • php artisan config:cache // 配置缓存
    • php artisan route:cache // 路由
  • php artisan view:cache // 视图缓存
  • composer dump-autoload --optimize //
  • 开启 OpCache
    $ sudo vim /etc/php/7.2/fpm/php.ini
    // set opcache.enable=1
    // ...
    $ sudo service php5.6-fpm restart
    $ sudo service nginx restart

前端处理

资源构建
npm run dev    // 本地开发,开启 debug 模式
npm run prod    // 线上部署(进行压缩资源)

npm run watch   // 监视编译(开发时启用)
模板使用

使用 mixin 注入 vue 组件

<script>
    var js_data = @json($js_data);
    var mixin = {
        data: {
        },
        methods: {
        }
    }
</script>
<script type="text/javascript" src="{{asset('js/app.js')}}"></script>

改动内容

  • 设置日志打印默认按天执行(.env::LOG_CHANNEL)

  • 增加默认加载软件包

  • 增加前端资源

    • element-ui 样式框架(可选方案 iview)
  • 增加默认图片存储目录(storage/app/public/images)

  • 扩展结构分层 想法来源

    • 系统分层
      • Controllers 控制器层
    • 主要分层
      • Services 业务服务层
      • Repositories Repository 数据仓库层
      • Models 模型层(无需创建,默认通过模型工具创建)
    • 扩展分层
      • Presenters 固定业务主持中控层
      • Transformers 转化层/筛选层(筛选后在选择输出)
      • Formatters 格式化层(对于输出数据进行格式化,服务于 view 层),便于前端模版渲染与展示
  • 增加 redis 多语言配置读取

  • 设置默认 Schema index 长度

    使用 Schema 注意 MySQL 版本低于 5.7.7 需设置默认 index 长度小于 191

    Schema::defaultStringLength(191);

待办

完善资源功能

增加多语言数据库,和迁移

增加动态视图模式和静态视图模式切换(渲染后生成 view)

简化介绍,完善 wiki


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK