#phalapi-入門篇4(國際化高可用和自動生成文檔)#

##前言##
***先在這里感謝phalapi框架創始人@dogstar,為我們提供了這樣一個優秀的開源框架.***
在本小節主要講解如何使用phalapi框架自帶的國際化和文檔自動生成,以及這樣做可以的優點和好處和能解決哪方面的問題
附上:
官網地址:[http://www.phalapi.net/](http://www.phalapi.net/ "PhalApi官網")
開源中國Git地址:[http://git.oschina.net/dogstar/PhalApi/tree/release](http://git.oschina.net/dogstar/PhalApi/tree/release "開源中國Git地址")
##1. 國際化##
說道國際化大家應該不陌生,對于顯示端(web,andorid,ios)來說就是對顯示的內容可以任意切換語言,
但對于服務端來說就是對于返回值可以任意切換語言,來達到給國外友人去使用這種業務,
雖然說這種需求是少數,但是在框架內部有提供良好處理國際化這種業務的工具,讓我們先看看具體是什么樣子的
大家在init.php下面可以看到這樣一句話
//翻譯語言包設定
SL('zh_cn');
這句話是指向了**/Language/zh_cn/common.php**文件,打開這個文件可以發現這樣一組對照關系
return array(
'Hi {name}, welcome to use PhalApi!' => '{name}您好,歡迎使用PhalApi!',
'user not exists' => '用戶不存在',
);
我們看看自帶的Demo例子里面有使用到第一個,使用方法是這樣的
'content' => T('Hi {name}, welcome to use PhalApi!', array('name' => $this->username)),
大家是不是感覺突然之間發現了什么,對的就是使用T方法我們看一下T方法的注釋
/**
* 快速翻譯
* @param string $msg 待翻譯的內容
* @param array $params 動態參數
*/
這里的$msg 也就是在common.php中的key比如**user not exists**
$params參數是用來替換key里面用{name}括弧括起來的參數的傳遞一個數組key就和括弧里面的參數相同value就是你需要顯示的類容
是不是感覺簡單易用啊,那我們動手實驗一下我們把zh_cn/common.php加入一條對照
'Login success' => '登錄成功',
在en/common.php也加入一條數據
'Login success' => 'Login success1',
我們修改Default.index接口如下
public function index() {
return T('Login success');
}
我們看能得到什么結果

那我們把init.php中的**SL('zh_cn');**改成**SL('en');**會有什么結果呢

就能得到我們在**en/common.php**中寫下的**Login success1**這樣就可以輕易的切換返回語言從而實現國際化
但是它帶來的好處不僅如此,還有易于修改和高可用這兩點好處
先說第一點易于修改:我在原來剛剛開始做項目的時候每個接口里面返回值全是寫死的,比如**用戶不存在**這種等等的錯誤返回,當要修改的時候我們面臨了一個問題全局替換,這樣是很不可取的所以后面就統一成了一個統一的文件來存放返回結果,當我們需要把**用戶不存在**修改成**請確認用戶的真實性**這樣的業務的時候,我們只需要修改一個統一的文件
好處之二就是高可用,高可用的表現又有兩種一種是上面所說的項目內的復用,第二種就是新項目的復用,當你開始一個新項目的時候其實已經有很多返回是通用的了,那么你就可以直接使用或者是拷貝過來,很多重復的工作量就可以省去
##2. 文檔自動生成##
大家可以發現和index.php以及init.php并行的還有一個checkApiParams.php一直沒有用到,當我們試著去訪問一下

看到了這樣的頁面,訪問這個文件的時候和訪問接口一樣的默認訪問了Default.index的文檔頁面也有說明

它的機制是通過接口文件上的注釋生成的返回結果
/**
* 默認接口服務
* @return string title 標題
* @return string content 內容
* @return string version 版本,格式:X.X.X
* @return int time 當前時間戳
*/
剖析一下**@return string title** 標題 第一個是必要參數**@return**后面接著一個空格(千萬不能多空格否則會失效)返回類型在接著一個空格返回名稱
請求參數會按照接口文檔中的**getRules**生成一些限定條件會自動生成說明需要加上**'desc' => 說明就能生成**大家可以試著訪問一下user.getBaseInfo接口文檔就能看到請求參數是有說明的
使用自動生成文檔的好處在于會時時更新不必在開發過程中要取維護接口文檔而煩惱,還有一點就是容錯高因為是事實的所以不會出現請求參數接口和文檔不同步的情況所以很推薦使用,但是對于返回結果來說需要手工維護不過也比維護文檔來的方便,而且不用下載網上直接看,
其實大家看到/Public/demo/listAllApis.php里面這個相當于一個導航訪問[http://localhost/Public/demo/listAllApis.php](http://localhost/Public/demo/listAllApis.php "http://localhost/Public/demo/listAllApis.php")可以看到以下結果

對于這個文件可以自定義成自己的文檔入口文件,可以自己劃分模塊然后把接口文檔的地址寫上去名稱和說明這樣也不需要手動在url里面去輸入接口名稱了
**注:**在這里有一個坑,如果要使用自動生成文檔的話需要關掉一些PHP緩存拓展,因為這些拓展在緩存的時候會**去除掉注釋之后在緩存**會導致返回結果無法生成,比如opcache.xcache這類的拓展都會導致此類問題
##3. 總結##
本小節主要講解了一下如何使用國際化使用的好處,以及運用官方工具生成及時文檔,在下一章節我們會講解激動人心的數據庫操作希望大家能持續關注!
注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!
**官網QQ交流群:421032344 歡迎大家的加入!**
- 空白目錄
- [7.1]-phalapi-入門篇1(簡單介紹以及環境搭建)
- [7.2]-phalapi-入門篇2(把它玩起來)
- [7.3]-phalapi-入門篇3(請求和返回)
- [7.4]-phalapi-入門篇4(國際化高可用和自動生成文檔)
- [7.5]-phalapi-入門篇5(數據庫操作和Model層)
- [7.6]-phalapi-入門篇6(小技巧和淺談API適用范圍以及入門篇總結)
- [7.7]-phalapi-進階篇1(三層結構Api,Domain,和Model)
- [7.8]-phalapi-進階篇2(DI依賴注入和單例模式)
- [7.9]-phalapi-進階篇3(自動加載和攔截器)
- [7.10]-phalapi-進階篇4(notorm進階以及事務操作)
- [7.11]-phalapi-進階篇5(數據庫讀寫分離)
- [7.12]-phalapi-進階篇6(解決大量數據存儲數據庫分表分庫拓展)
- [7.13]-phalapi-進階篇7(使用緩存以及用redis拓展解決實際問題)
- [7.14]-phalapi-進階篇8(PhalApi能帶來什么和進階篇總結)