#phalapi-入門篇1(把它玩起來)#

##前言##
***先在這里感謝phalapi框架創始人@dogstar,為我們提供了這樣一個優秀的開源框架.***
這一小節主要是在搭建好的環境下,先把這個框架運行起來,和數據庫交互起來(這里用的是mysql),對整個框架的結構進行最簡單的一些介紹,以及點出一些新手長遇到的一些問題和一些**小技巧**.
附上:
喵了個咪的博客:[w-blog.cn](w-blog.cn)
官網地址:[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. 運行起來吧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](http://www.chromein.com/crx_12022.html "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 歡迎大家的加入!**
####[上一章](/wikis/%5b7.1%5d-phalapi-%e5%85%a5%e9%97%a8%e7%af%871(%e7%ae%80%e5%8d%95%e4%bb%8b%e7%bb%8d%e4%bb%a5%e5%8f%8a%e7%8e%af%e5%a2%83%e6%90%ad%e5%bb%ba).html) [文檔首頁](/wikis/) [下一章](/wikis/%5b7.3%5d-phalapi-%e5%85%a5%e9%97%a8%e7%af%873(%e8%af%b7%e6%b1%82%e5%92%8c%e8%bf%94%e5%9b%9e).html)
- 空白目錄
- [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能帶來什么和進階篇總結)