[開源] LaravelPlus - 基於 Laravel 魔改,為方便實際業務使用 - 開發中

ben1024發表於2019-06-09

目的

為了減少重複 CURD 和新專案的配置麻煩等問題,(就是為了騙星星LaravelPlus )
如:

  • 現有的 infyomlabs/laravel-generator CODE 生成工具雖然好用,但是不太喜歡樣式和程式碼結構。
  • 有些本地,測試,線上的配置需要頻繁改動的需要。
  • 多個專案構建引入包,配置擴充套件等重複性操作
  • 基於 ReactPHP 多程式使用

介紹

LaravelPlus 基於 Laravel 增加部分軟體包初始安裝和進行業務使用功能改動,來建立一個開箱即用的應用

版本基礎

當前穩定版本:stable

當前版本基於

PHP Laravel(影響不大,降低版本理論可以)
>=7.1.3 >=5.8

專案使用說明

下載專案

// 1. github (推薦)
$ git clone https://github.com/ElapseAnnals/LaravelPlus.git  
$ git checkout v5.8.0 // 切換至當前最新穩定版本

// 或

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

複製專案

//  1.在當前目錄執行自動複製指令碼 (推薦)
$ php LaravelPlus/create YourProject

// 或

//  2.在當前目錄手動複製專案至自身專案
$ 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   

初始化

$ cd YourProject //  進入 YourProject 專案中
$ composer install   // 更新軟體包 (請先已安裝 composer )
$ php artisan key:generate    // 更新 key
$ php artisan vendor:publish // 釋出擴充套件包的資源
$ php artisan migrate  // 遷移
$ php artisan storage:link // 圖片資源軟連線對映【非必須】

Tips:

  1. 相容 laravel-plus 目錄名

功能使用說明

建立 framework 分層指令碼和資源對映:想法來源

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
熱切換配置使用(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 多語言配置讀取

待辦

完善資源功能:Controller 中模型資料處理和資料返回

增加 Redis 多語言資料庫,和遷移

增加動態檢視模式和靜態檢視模式(渲染後生成 view)切換

完善 wiki

相關文章