背景
年前我結合小白接口和vue進行了開發,利用小白接口作爲自己的應用後端支持。同時我一直在尋找一個合適的PHP框架,作爲api後臺,我對比了幾款主流框架,laravel、tp、yaf和phalapi。最終還是覺得phalapi是最適合我的項目的後端的,當然也有小白接口的原因,用過小白接口對phalapi自然更熟悉一點。
今天這篇筆記主要記錄以下知識點:phalapi的安裝部署、一個完整的數據庫操作的接口、phpstorm安裝和服務器同步設置及postman安裝。
框架安裝
我安裝的是最新的2.4.2版本,採用composer安裝,composer在我安裝寶塔面板時已經帶上了,因此可以直接cd項目目錄下使用如下命令:composer create-project phalapi/phalapi
等待幾分鐘即可。
我的websever是apache,需要添加以下僞靜態規則以便於接口請求。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^dev.phalapi.net$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/phalapi/public/
RewriteRule ^(.*)$ /phalapi/public/$1
RewriteRule ^(/)?$ index.php [L]
</IfModule>
由於在ssh端口我用的是root用戶,因此訪問默認接口請求時出現了權限不足的報錯提示,使用如下命令解決更改項目目錄及文件權限和所有者爲www。
主要命令爲chmod -R a+rx *
,chown -R www:www *
。
配置完成後再次訪問默認接口,不再報錯,說明框架已安裝成功。
開發及調試工具
phpstorm是一款專門爲php開發者而生的輕量IDE,最方便的是自動與遠程服務器對比更新的功能。安裝過程不贅述,簡單記錄一下遠程同步的配置。
首先在服務器開啓一個ftp綁定服務器項目根目錄,然後在phpstorm中,進行以下步驟:
- 第一步,打開同步配置
- 二步,添加服務器鏈接配置
-
第三步,設置 IP、賬戶密碼等服務器鏈接配置
-
進一步配置項目根目錄,並完成配置
此時,phpstorm便會將本地的文件與服務器進行實時同步了,更方便部署遠端項目。
postman是一款專門調試api的工具,有谷歌瀏覽器插件版,也有windows下的exe版,安裝及使用單獨開文記錄。
我的第一個完整數據庫接口
phalapi框架採用的是ADM結構,即Api、Domain(業務邏輯層)、Model(數據操作層),獨立寫一個完整的添加數據的接口(這裏以註冊接口爲例)能增強對這種結構的理解。
配置數據庫連接文件
在開始之前我們先要配置好數據庫連接文件,文件位置在./config/dbs.php
,默認配置爲
return array(
/**
* DB數據庫服務器集羣
*/
'servers' => array(
'db_master' => array( //服務器標記
'host' => '127.0.0.1', //數據庫域名
'name' => 'phalapi', //數據庫名字
'user' => 'root', //數據庫用戶名
'password' => '', //數據庫密碼
'port' => 3306, //數據庫端口
'charset' => 'UTF8', //數據庫字符集
),
),
/**
* 自定義路由表
*/
'tables' => array(
//通用路由
'__default__' => array(
'prefix' => 'tbl_',
'key' => 'id',
'map' => array(
array('db' => 'db_master'),
),
),
),
);
在數據庫中建立相應的數據表,注意前綴要和這裏的prefix
相同,如果不同則需要手動建立model層與數據表的聯繫。
註冊接口實例
首先我們在默認應用模塊app下的User.php增加一個註冊接口,並寫好備註以便系統自動生成接口文檔。
<?php
namespace App\Api;//聲明命名空間
use PhalApi\Api;//引入框架類
use App\Domain\User as DomainUser;//引入domain層
/**
* 用戶模塊接口服務
*/
class User extends Api {
public function getRules() {//框架接收請求數據規則,框架根據下面的數組數據生成各個接口的參數文檔
return array(
'register' => array(
'username' => array('name' => 'username', 'require' => true, 'min' => 1, 'max' => 50, 'desc' => '用戶名'),
'password' => array('name' => 'password', 'require' => true, 'min' => 6, 'max' => 20, 'desc' => '密碼'),
),
);
}
/**
* 註冊接口
* @desc 根據賬號和密碼進行註冊操作
*
* @return int id 用戶註冊ID
*/
public function register() {
$rs = array();//返回類型儘量爲可拓展類型的,如數組、對象
$newData = array(
'username' => $this->username,
'password' => $this->password,
);
$domain = new DomainUser();//實例化domain層的對象
$id = $domain->insert($newData);//調用domain層的insert方法並接收返回數據
$rs['id'] = $id;
return $rs;
}
}
其後完善domain層的文件,文件位置爲app/domain/User.php
<?php
namespace App\Domain;//聲明命名空間
use App\Model\User as ModelUser;//引入model層
class User {
public function insert($newData) {
$newData['post_date'] = date('Y-m-d H:i:s', $_SERVER['REQUEST_TIME']);//生成註冊時間,數據庫中對應字段記錄用戶註冊時間
$model = new ModelUser();//實例化model層數據庫操作對象
return $model->insert($newData);//調用model層的insert方法
}
}
在model層建立相應文件。
<?php
/**
* Created by PhpStorm.
* User: 14680
* Date: 2019/2/7
* Time: 22:01
*/
namespace App\Model;//聲明命名空間
use PhalApi\Model\NotORMModel as NotORM;//引入框架封裝的數據庫操作類庫notorm
class User extends NotORM {
public function register($newData) {
$user = $this->getORM(); // 在Model子類內,進行數據庫操作前,先獲取NotORM實例
$user->insert($newData);//調用notrom中封裝的insert方法
return $user->insert_id();
}
}
看看效果
框架自動生成的接口文檔在public/docs.php下,還提供了方便的在線調試功能。
註冊接口詳情
試一下進行在線請求模擬
可看到如下返回結果,說明接口已經生效
看一下數據庫的相應數據
第一條接口開發完成!