有網友每次建立新專案時,都要去執行一次 composer create-project hyperf/hyperf-skeleton
。其實每次這樣建立專案,效率會很低。個人專案其實還好,但是對於公司專案而言,就不是那麼友好了。比如有的公司會建立很多元件包,或者很多公共配置之類的程式碼。每次 create
專案都需要重新 copy
進來,效率很差,而且又不方便維護。
所以我們可以製作一個骨架包,每次建立新專案,都可以當前骨架包為藍本進行初始化。
製作骨架包
我們使用 hyperf/hyperf-skeleton
來建立骨架包,並不安裝任何可選項。
composer create-project hyperf/hyperf-skeleton parent
為了方便演示,我使用
Github
做版本控制。
將程式碼上傳到 Aquarmini/skeleton-parent
cd parent
git init
git remote add -m master origin git@github.com:Aquarmini/skeleton-parent.git
git add .
git commit -a -m "INIT"
git push origin master
git branch --set-upstream-to=origin/master master
建立 Demo 專案
接下來讓我們基於 parent
建立 demo
專案
mkdir demo
git init
git remote add -m master parent git@github.com:Aquarmini/skeleton-parent.git
git pull parent master
git branch parent
git branch --set-upstream-to=parent/master parent
git remote add -m master origin git@github.com:Aquarmini/skeleton-demo.git
git checkout master
git push origin master
git push origin master
git branch --set-upstream-to=origin/master master
接下來看一下我們的 git
配置
$ cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
precomposeunicode = true
[remote "parent"]
url = git@github.com:Aquarmini/skeleton-parent.git
fetch = +refs/heads/*:refs/remotes/parent/*
[branch "parent"]
remote = parent
merge = refs/heads/master
[remote "origin"]
url = git@github.com:Aquarmini/skeleton-demo.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
讓我們隨意修改一點程式碼,並推送到 demo 倉庫。
合併 Parent
當我們 parent 有任何修改時,只需要合併進來即可。
比如我們增加一個 di
方法,可以方便拿到 Container
修改 composer.json
,以下省略不想關的程式碼
{
"autoload": {
"psr-4": {
"App\\": "app/"
},
"files": [
"app/Kernel/Functions.php"
]
}
}
然後增加 app/Kernel/Functions.php
檔案
<?php
declare(strict_types=1);
/**
* This file is part of Hyperf.
*
* @link https://www.hyperf.io
* @document https://doc.hyperf.io
* @contact group@hyperf.io
* @license https://github.com/hyperf-cloud/hyperf/blob/master/LICENSE
*/
use Hyperf\Utils\ApplicationContext;
if (! function_exists('di')) {
/**
* Finds an entry of the container by its identifier and returns it.
* @param null|mixed $id
* @return mixed|\Psr\Container\ContainerInterface
*/
function di($id = null)
{
$container = ApplicationContext::getContainer();
if ($id) {
return $container->get($id);
}
return $container;
}
}
提交程式碼到 parent 專案
然後在 demo 專案中拉取 parent 分支。
git checkout parent
git pull parent master
git checkout master
git merge parent
git push origin master
寫在最後
Hyperf 是基於 Swoole 4.4+
實現的高效能、高靈活性的 PHP 協程框架,內建協程伺服器及大量常用的元件,效能較傳統基於 PHP-FPM
的框架有質的提升,提供超高效能的同時,也保持著極其靈活的可擴充套件性,標準元件均基於 PSR 標準 實現,基於強大的依賴注入設計,保證了絕大部分元件或類都是 可替換
與 可複用
的。
框架元件庫除了常見的協程版的 MySQL 客戶端
、Redis 客戶端
,還為您準備了協程版的 Eloquent ORM
、WebSocket 服務端及客戶端
、JSON RPC 服務端及客戶端
、GRPC 服務端及客戶端
、Zipkin/Jaeger (OpenTracing) 客戶端
、Guzzle HTTP 客戶端
、Elasticsearch 客戶端
、Consul 客戶端
、ETCD 客戶端
、AMQP 元件
、Apollo 配置中心
、阿里雲 ACM 應用配置管理
、ETCD 配置中心
、基於令牌桶演算法的限流器
、通用連線池
、熔斷器
、Swagger 文件生成
、Swoole Tracker
、Blade 和 Smarty 檢視引擎
、Snowflake 全域性ID生成器
等元件,省去了自己實現對應協程版本的麻煩。
Hyperf 還提供了 基於 PSR-11 的依賴注入容器
、註解
、AOP 面向切面程式設計
、基於 PSR-15 的中介軟體
、自定義程式
、基於 PSR-14 的事件管理器
、Redis/RabbitMQ 訊息佇列
、自動模型快取
、基於 PSR-16 的快取
、Crontab 秒級定時任務
、Translation 國際化
、Validation 驗證器
等非常便捷的功能,滿足豐富的技術場景和業務場景,開箱即用。