phalapi-入門篇2(把它玩起來)
#phalapi-入門篇1(把它玩起來)#
##前言## 先在這裡感謝phalapi框架創始人@dogstar,為我們提供了這樣一個優秀的開源框架.
這一小節主要是在搭建好的環境下,先把這個框架執行起來,和資料庫互動起來(這裡用的是mysql),對整個框架的結構進行最簡單的一些介紹,以及點出一些新手長遇到的一些問題和一些小技巧.
附上:
開源中國Git地址:http://git.oschina.net/dogstar/PhalApi/tree/release
##1. 執行起來吧PhalApi##
不用說首先當然是下載專案檔案咯.
推薦使用git工具(如果不會使用Git 可以直接去開源中國下載原始碼):
使用git把https://git.oschina.net/dogstar/PhalApi.git克隆下來
然後切換到1.2.1分支上面(注:這裡使用的是當前最新版本)
現在我們能看到真正的原始碼了 我們先來分析一下目錄結構其實在專案裡面有一個檔案README.md裡面已經有介紹了(我在補充一點)
│ ├── PhalApi //PhalApi框架,後期可以整包升級(儘量小的改動,大改動會影響框架的迭代) │ │ ├── Public //對外訪問目錄,建議隱藏PHP實現(增加安全性) │ └── demo //Demo服務訪問入口(我認為是所謂的專案名) │ │ ├── Config //專案介面公共配置,主要有:app.php, sys.php, dbs.php(配置檔案不多說) ├── Data //專案介面公共資料(也就是從一開始的資料庫sql檔案以及後面結構有任何變化的sql檔案都存放這裡,方便自己查詢,好習慣之一) ├── Language //專案介面公共翻譯(需要國際化的話很有用,讓返回更優雅高可用) ├── Runtime //專案介面執行檔案目錄,用於存放日記,可軟鏈到別的區(主要是日誌,一定要有寫的許可權不然會報錯) │ │ └── Demo //應用介面服務,名稱自取,可多組(專案檔案所謂真正實現業務的地方) ├── Api //介面響應層(主要用於接收請求,返回結果,把一塊大的業務分發成一塊塊小的業務) ├── Domain //介面領域層(我覺得可以叫做邏輯層容易理解一點,分成的各個小的業務在這裡進行處理) ├── Model //介面持久層(實現最簡單的資料庫操作,不要有任何邏輯因為是高可用) └── Tests //介面單元測試(不用多說)
然後我們把專案檔案放到網站的根目錄然後我們執行http://localhost/Public/(localhost請自行替換)我們可以獲得以下結果:
強烈推薦使用json解析工具(這裡使用的chorme外掛json-handle附上下載地址json-handle)
這樣第一步執行PhalApi就已經完成了
注:有些童鞋可能執行起來是一片白(這點請大家特別注意,有很多人問我怎麼自己寫了一個模組呼叫一直是一片白,其實是php報錯了只是你沒有開啟php報錯)解決方法是修改php.ini檔案中的兩個引數
error_reporting=E_ALL
display_errors=ON
##2. 他是如何執行起來的##
先說說為什麼會有上面這一串返回,有php基礎的人都知道訪問了Public目錄預設是訪問到了Index.php這個檔案我們來看看它的程式碼
<?php
/**
* $APP_NAME 統一入口
*/
require_once dirname(__FILE__) . '/init.php'; //引入初始化檔案我們以後再講
//裝載你的介面
DI()->loader->addDirs('Demo'); //這個就是定義了你介面所在的目錄
/** ---------------- 響應介面請求 ---------------- **/
$api = new PhalApi();
$rs = $api->response(); //執行你的介面
$rs->output(); //返回結果
大家要是進入到$api->response();裡面就會發現有這樣一條語句
$service = DI()->request->get('service', 'Default.Index');
也就是當你沒有定義訪問莫個介面的時候,它會指向到Default模組下的Index介面
所以http://localhost/Public/等同於http://localhost/Public/?service=Default.Index試一試會得到一樣的結果
機智的小夥伴一定發現了在專案中的Demo/Api裡面有Default.php這樣一個檔案而恰巧裡面有一個index方法,沒錯就是通過service=Default.Index找到了Default模組中的index方法
實現這一機制的語句是:
$rs->setData(call_user_func(array($api, $action)));
有興趣的童鞋可以研究研究
##3. 資料庫操作##
Demo下面的Api檔案除了上面所呼叫的Default.php還有一個User.php沒錯就是User模組裡面分別有兩個介面可供呼叫 getBaseInfo,getMultiBaseInfo那我們直接呼叫getBaseInfo看看結果http://localhost/Public/?service=User.getBaseInfo
相信大家一眼就能看出來是缺少了傳參我們在試試帶上引數會怎麼樣http://localhost/Public/?service=User.getBaseInfo&user_id=1
當然這個是因為沒有配置資料庫引起的如何配置?當然是在配置檔案裡面配置,大家開啟Config目錄下的 dbs檔案key看到以下類容
'db_demo' => array( //伺服器標記
'host' => 'localhost', //資料庫域名
'name' => 'phalapi', //資料庫名字
'user' => 'root', //資料庫使用者名稱
'password' => '', //資料庫密碼
'port' => '3306', //資料庫埠
'charset' => 'UTF8', //資料庫字符集
),
我們把它配置好然後再執行,可能有些人還是看到的和上面的情況是一樣的,要不就是資料庫不通要不就是沒有建立phalapi資料庫(自行建立)
當我們保證資料庫能夠聯通,phalapi資料庫也存在的情況下再去連結可能會出現類似於Warning: mkdir(): Permission denied in PhalApi/PhalApi/Logger/File.php on line 45這類錯誤,這是應為沒有建立檔案許可權造成的,windows下面基本不會應為讀寫許可權出問題,liunx下面要注意這點
當我們給目錄賦予許可權之後在執行可能會出現一個很長的報錯PDOException大概的意思就是找不到tbl_user表
其實sql檔案已經在Data資料夾裡面了phalapi_test.sql
我們把sql檔案執行一下建立好的效果是這樣的(phalapi_test庫名改成phalapi)
讓我們再次執行那麼結果就出來了
這樣我們就已經把框架自帶的例子跑了起來
##4. 總結##
這一小節主要是把phalapi的一些基本的機制做了一些簡單的介紹,以及把框架自帶的例項運行了起來,下一小節會著重介紹一下框架自帶的請求驗證,返回結果和自動生成的介面文件!
注:筆者能力有限有說的不對的地方希望大家能夠指出,也希望多多交流!
官網QQ交流群:421032344 歡迎大家的加入!