目的
為了減少重複 CURD 和新專案的配置麻煩等問題,(就是為了騙星星:LaravelPlus )
如:
- 現有的 infyomlabs/laravel-generator CODE 生成工具雖然好用,但是不太喜歡樣式和程式碼結構。
- 有些本地,測試,線上的配置需要頻繁改動的需要。
- 多個專案構建引入包,配置擴充套件等重複性操作
- 基於 ReactPHP 多程式使用
介紹
LaravelPlus 基於 Laravel 增加部分軟體包初始安裝和進行業務使用功能改動,來建立一個開箱即用的應用
版本基礎
當前穩定版本:
當前版本基於
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:
- 相容 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:
- .env 配置 DYNAMIC_IS_STRICT 控制熱配是否嚴格模式(預設 false 關閉)
- 嚴格模式下不會繼承 production/develop,完全採用當前環境配置
- 預設在繼承基礎上有重複屬性,會覆蓋繼承項
- 繼承基礎特有屬性會被攜帶至當前配置
- 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)
-
增加預設載入軟體包
- production 生產環境
- respect/validation 驗證包
- react/react ReactPHP 多程式非同步擴充套件(可以移除)
- 引入 ElasticSearch For scout
- laravel/scout
- tamayo/laravel-scout-elastic
- elastic/elasticsearch-php 原生 ElasticSearch (可選)
- rabbitMQ 擴充套件
- vladimir-yuldashev/laravel-queue-rabbitmq - php-amqplib/php-amqplib 原生(可選)
- rap2hpoutre/laravel-log-viewer 日誌展示 [訪問 host/logs]
- predis/predis Redis 外掛(建議使用 php-redis 擴充套件)
- php-tool/laravel-plus-make Laravel Plus Make 自動生成 framework 程式碼外掛軟體包(可單獨引用)
- guzzlehttp/guzzle Http 請求包
- overtrue/laravel-lang 多語言本地化 i18n
- develop 開發環境
- reliese/laravel 模型生成工具
$ php artisan code:models --table=tb_name
- [doctrine/dbal]
- barryvdh/laravel-debugbar debuger 工具
- barryvdh/laravel-ide-helper ide 輔助工具
$ artisan ide-helper:generate
- overtrue/laravel-query-logger 日誌工具
- nunomaduro/phpinsights 統計檢測專案問題(類似 PHPCS,需求版本 php 7.2.* ,請手動安裝 composer require nunomaduro/phpinsights --dev)
- infyomlabs/laravel-generator Code 程式碼生成工具(可選)
- reliese/laravel 模型生成工具
- production 生產環境
-
增加前端資源
- element-ui 樣式框架(可選方案 iview)
-
增加預設圖片儲存目錄(storage/app/public/images)
- 擴充套件結構分層 想法來源
- 系統分層
- Controllers 控制器層
- 主要分層
- Services 業務服務層
- Repositories Repository 資料倉儲層
- Models 模型層(無需建立,預設通過模型工具建立)
- 擴充套件分層
- Presenters 固定業務主持中控層
- Transformers 轉化層/篩選層(篩選後在選擇輸出)
- Formatters 格式化層(對於輸出資料進行格式化,服務於 view 層),便於前端模版渲染與展示
- 系統分層
- 增加 Redis 多語言配置讀取
待辦
完善資源功能:Controller 中模型資料處理和資料返回
增加 Redis 多語言資料庫,和遷移
增加動態檢視模式和靜態檢視模式(渲染後生成 view)切換
完善 wiki