有網友每次建立新項目時,都要去執行一次 composer create-project hyperf/hyperf-skeleton
。其實每次這樣建立項目,效率會很低。我的項目其實還好,可是對於公司項目而言,就不是那麼友好了。好比有的公司會建立不少組件包,或者不少公共配置之類的代碼。每次 create
項目都須要從新 copy
進來,效率不好,並且又不方便維護。php
因此咱們能夠製做一個骨架包,每次建立新項目,均可以當前骨架包爲藍本進行初始化。git
咱們使用 hyperf/hyperf-skeleton
來建立骨架包,並不安裝任何可選項。github
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
接下來讓咱們基於 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
配置json
$ 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 有任何修改時,只須要合併進來便可。服務器
好比咱們增長一個 di
方法,能夠方便拿到 Container
app
修改 composer.json
,如下省略不想關的代碼composer
{ "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 驗證器
等很是便捷的功能,知足豐富的技術場景和業務場景,開箱即用。