Phalapi框架重寫(xiě)請(qǐng)求材部,實(shí)現(xiàn)小版本迭代

例:/?service=App/Site/Index
service如何獲取毫缆,可查看phalapi官方文檔
如何重寫(xiě)請(qǐng)求,在哪重寫(xiě)請(qǐng)求败富,可查看phalapi官方文檔
請(qǐng)求目錄結(jié)構(gòu)

請(qǐng)求目錄結(jié)構(gòu)

composer配置
composer配置

functions.php的使用:\App\V1\Hello();

版本為 1.0.0的請(qǐng)求方法 及 版本為 1.0.1請(qǐng)求到的方法

初版和二版

以下為具體代碼實(shí)現(xiàn);

// 優(yōu)先返回自定義格式的接口服務(wù)名稱(chēng)

$header = $this->getHeader("HTTP_VERSION");//自定義版本命名

//獲取更新版本
$versionArray = array_filter(explode(".",$header),function($v){if(is_null($v))return false;else{return true;}}); //array(3) {[0]=>string(1) "1",[1]=>string(1) "0",[2]=>string(1) "1"}
$version =  "v".reset($versionArray); //v1

$version = strtoupper($version);//小寫(xiě)變大寫(xiě) V1

if(!$header || count($versionArray)<3){
    return '版本丟失';
}

$serviceArray = explode("/",$service);//array(3) {[0]=>string(3) "App",[1]=>string(4) "Site",[2]=>string(5) "Index"}

if(count($serviceArray) == 2){
    array_unshift($serviceArray,"App");
}

//判斷公共方法悔醋,取消版本驗(yàn)證 (自定義)
//if(in_array(reset($serviceArray),$this->noVersion())){
//    return implode($serviceArray,".");
//}

//訪(fǎng)問(wèn)具體版本模塊 (后期可優(yōu)化為加密token)
$namespace = count($serviceArray) == 2 ? 'App_V1' : reset($serviceArray)."_".$version;

$apiName = $serviceArray[count($serviceArray)-2];

$end = end($serviceArray);

$actionVersion = $end;
//小版本迭代時(shí),需要訪(fǎng)問(wèn)的具體方法兽叮,(后期可優(yōu)化為加密token)
if(($versionArray[1]>0 || $versionArray[2]>0)){
    $functionVisit = $versionArray[1].".".$versionArray[2];
    //小版本向下兼容
    $versionCompatibility= $this->actionDownwardCompatibility($namespace,$apiName,$end,$functionVisit);
    if($versionCompatibility){
        $actionVersion = $versionCompatibility;
    }

}

$actionName = $actionVersion;


return $namespace .".".$apiName.".".$actionName;// 最終路由:App_V1.User_Info.Index_0_1

actionDownwardCompatibility 方法芬骄,查找文件中是否含有 類(lèi) 及 方法


    /**
     * 版本向下兼容
     * @param $namespace string App_V1
     * @param $api string Lists_Courses
     * @param $action string Index
     * @param $versionNum string 1.1
     * @return bool
     */
    private function actionDownwardCompatibility($namespace,$api,$action,$versionNum){
        $namespace = str_replace("_",'\\',$namespace);
        $className  = '\\' . $namespace . '\\Api\\' . str_replace('_', '\\', ucfirst($api));
        $rClass = new \ReflectionClass($className);
        for ($i=floatval($versionNum);$i>=0.1;$i=$i-0.1){
            $version = str_replace(".",'_',number_format($i,1));
            $newAction = $action."_".$version;
            if($rClass->hasMethod($newAction)){
                return $newAction;
            }
        }
        return false;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末猾愿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子账阻,更是在濱河造成了極大的恐慌蒂秘,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淘太,死亡現(xiàn)場(chǎng)離奇詭異姻僧,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蒲牧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)撇贺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人冰抢,你說(shuō)我怎么就攤上這事松嘶。” “怎么了挎扰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵翠订,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我遵倦,道長(zhǎng)尽超,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任梧躺,我火速辦了婚禮似谁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘燥狰。我一直安慰自己棘脐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布龙致。 她就那樣靜靜地躺著丰捷,像睡著了一般冯乘。 火紅的嫁衣襯著肌膚如雪蜜笤。 梳的紋絲不亂的頭發(fā)上点弯,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音榛了,去河邊找鬼在讶。 笑死,一個(gè)胖子當(dāng)著我的面吹牛霜大,可吹牛的內(nèi)容都是我干的构哺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼曙强!你這毒婦竟也來(lái)了残拐?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤碟嘴,失蹤者是張志新(化名)和其女友劉穎溪食,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體娜扇,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡错沃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了雀瓢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枢析。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖致燥,靈堂內(nèi)的尸體忽然破棺而出登疗,到底是詐尸還是另有隱情排截,我是刑警寧澤嫌蚤,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站断傲,受9級(jí)特大地震影響脱吱,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜认罩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一箱蝠、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧垦垂,春花似錦宦搬、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至页慷,卻和暖如春憔足,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酒繁。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工滓彰, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人州袒。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓揭绑,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親郎哭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子他匪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359