者指南:5個(gè)步驟為項(xiàng)目添加新的中間件擴(kuò)展)
PuPHPet開發(fā)者指南5個(gè)步驟為項(xiàng)目添加新的中間件擴(kuò)展【免費(fèi)下載鏈接】puphpetVagrant/Puppet GUI項(xiàng)目地址: https://gitcode.com/gh_mirrors/pu/puphpetPuPHPet 是一款開源的Vagrant/Puppet GUI工具基于 Symfony 構(gòu)建通過網(wǎng)頁(yè)表單即可生成自定義的 PHP 開發(fā)虛擬機(jī)。本文面向想貢獻(xiàn)代碼的開發(fā)者教你用5 個(gè)簡(jiǎn)單步驟為 PuPHPet 添加一個(gè)新的中間件擴(kuò)展例如新增一個(gè)數(shù)據(jù)庫(kù)、消息隊(duì)列或搜索模塊讓你生成的虛擬機(jī)能力更豐富。準(zhǔn)備工作克隆代碼并跑通項(xiàng)目git clone https://gitcode.com/gh_mirrors/pu/puphpet cd puphpet composer install提交代碼前請(qǐng)遵循倉(cāng)庫(kù)根目錄的 CONTRIBUTING.md 規(guī)范從 master 切出特性分支、壓縮為單個(gè) commit 再發(fā)起 PR。1?? 讀懂?dāng)U展機(jī)制一個(gè)擴(kuò)展由哪些部分組成PuPHPet 采用配置驅(qū)動(dòng)設(shè)計(jì)每個(gè)中間件擴(kuò)展由 4 部分組成先建立整體認(rèn)知再動(dòng)手。組成部分位置職責(zé)YAML 配置三件套src/PuphpetBundle/Resources/config/擴(kuò)展名/表單默認(rèn)值與可選項(xiàng)擴(kuò)展管理器src/PuphpetBundle/Extension/Manager.php加載并合并配置控制器src/PuphpetBundle/Controller/渲染擴(kuò)展頁(yè)面、定義路由視圖模板src/PuphpetBundle/Resources/views/GUI 表單界面核心邏輯在Manager.php的addExtension()方法約第 32-55 行它讀取擴(kuò)展目錄下的data.yml、defaults.yml、available.yml用array_replace_recursive合并后注冊(cè)到內(nèi)存中。注意擴(kuò)展名中的連字符-會(huì)被自動(dòng)轉(zhuǎn)換為下劃線_。2?? 創(chuàng)建擴(kuò)展配置三件套data.yml / defaults.yml / available.yml在src/PuphpetBundle/Resources/config/下為你的新擴(kuò)展假設(shè)叫memcached建一個(gè)目錄放入三個(gè)文件# memcached/data.yml用戶表單提交的默認(rèn)值 install: 0 settings: port: 11211 # memcached/defaults.yml出廠默認(rèn)值會(huì)與 data 合并 install: 0 settings: port: 11211 # memcached/available.yml下拉框等可選項(xiàng)數(shù)據(jù)可為空可以直接參考現(xiàn)成的 Redis 擴(kuò)展src/PuphpetBundle/Resources/config/redis/data.yml、defaults.yml、available.yml結(jié)構(gòu)一目了然。 命名建議目錄名用小寫連字符風(fēng)格如elastic-search與services.yml中的注冊(cè)名保持一致。3?? 在 services.yml 中注冊(cè)新的中間件擴(kuò)展打開src/PuphpetBundle/Resources/config/services.yml第 5-48 行找到puphpet.extension.manager服務(wù)的calls列表按功能分組追加一行# work queue - [ addExtension, [ beanstalkd ] ] - [ addExtension, [ rabbitmq ] ] - [ addExtension, [ memcached ] ] # ← 你的新擴(kuò)展注冊(cè)完成后Manager會(huì)在應(yīng)用啟動(dòng)時(shí)自動(dòng)加載三件套 YAML。若 YAML 語(yǔ)法有誤啟動(dòng)時(shí)就會(huì)拋出解析異?!@也是 ManagerTest.php 中專門覆蓋的場(chǎng)景。4?? 添加控制器與視圖讓擴(kuò)展出現(xiàn)在 GUI 頁(yè)面第一步新建控制器src/PuphpetBundle/Controller/MemcachedController.php繼承PuphpetBundle\Controller仿照最簡(jiǎn)模板 RedisController.php第 15-28 行class MemcachedController extends Controller { /** * Route(/extension/memcached, namepuphpet.memcached.homepage) */ public function indexAction(Request $request, array $data) { return $this-render(PuphpetBundle::memcached.html.twig, [ memcached $data, ]); } }第二步新建視圖src/PuphpetBundle/Resources/views/memcached.html.twig。表單命名有約定安裝開關(guān)input typehidden namememcached[install] value0 / 一個(gè)value1的 checkbox配置項(xiàng)namememcached[settings][port]這種擴(kuò)展[分組][字段]格式提交時(shí)會(huì)原樣寫入config.yaml??蓞⒖?redis.html.twig 的安裝復(fù)選框 折疊面板 上一節(jié)/下一節(jié)按鈕結(jié)構(gòu)。第三步加入側(cè)邊菜單src/PuphpetBundle/Resources/views/side-menu.html.twig第 9-81 行在合適的分組如 Databases中添加一個(gè)指向#memcached的data-toggletab鏈接這樣新擴(kuò)展就會(huì)出現(xiàn)在左側(cè)導(dǎo)航和標(biāo)簽頁(yè)中。?5?? 對(duì)接 Puppet 模塊并驗(yàn)證打包輸出引入 Puppet 模塊虛擬機(jī)真正安裝中間件靠的是 Puppet。把新模塊加入archive/puphpet/puppet/Puppetfile必要時(shí)在archive/puphpet/puppet/manifests/site.pp中聲明參數(shù)如extra_config_files。理解數(shù)據(jù)流向用戶提交表單后FrontController.php 的postIndexAction()第 46-58 行調(diào)用Manager的createConfig()將表單數(shù)據(jù)與各擴(kuò)展默認(rèn)值合并再經(jīng)createArchive()輸出puphpet/config.yaml并打包成 ZIP 供下載。因此你的data.yml鍵名就是最終config.yaml中的頂層鍵。跑測(cè)試bin/phpunit? 提交前驗(yàn)證清單三個(gè) YAML 文件無(wú)語(yǔ)法錯(cuò)誤Manager啟動(dòng)不報(bào)錯(cuò)services.yml中已注冊(cè)擴(kuò)展控制器路由、視圖模板、側(cè)邊菜單三項(xiàng)齊全生成 ZIP 后puphpet/config.yaml中出現(xiàn)新擴(kuò)展的完整配置鍵用vagrant up實(shí)測(cè)虛擬機(jī)可正常安裝新中間件 完成以上 5 個(gè)步驟你就成功為 PuPHPet 這個(gè) Vagrant/Puppet GUI 添加了一個(gè)新的中間件擴(kuò)展。按照同樣的配置三件套 注冊(cè) 控制器 視圖 Puppet 模塊套路后續(xù)每新增一個(gè)模塊都會(huì)越來越順手?!久赓M(fèi)下載鏈接】puphpetVagrant/Puppet GUI項(xiàng)目地址: https://gitcode.com/gh_mirrors/pu/puphpet創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考