####[上一章](/wikis/%5B1.1%5D-%E4%B8%8B%E8%BD%BD%E4%B8%8E%E5%AE%89%E8%A3%85.html) [文档首页](/wikis/) [下一章](/wikis/%5B1.3%5D-%E5%9C%A8%E7%BA%BF%E4%BD%93%E9%AA%8C.html)
***
_有梦想的人学习能力特别强,而且不拒绝任何新东西。 -- 《理想丰满》_
##1.2.1 可视化安装
将代码上传到服务器并解压后,访问: ./Public/install/ 下的安装向导,如在浏览器打开:
```
http://dev.phalapi.com/install/
```
然后按照提示,一步步操作即可:
###(0)第零步:同意安装
![a pic](http://7xiz2f.com1.z0.glb.clouddn.com/QQ20151024155002.jpg)
###(1)第一步:环境检查
![a pic](http://7xiz2f.com1.z0.glb.clouddn.com/QQ20151024155015.jpg)
###(2)第二步:系统配置
![a pic](http://7xiz2f.com1.z0.glb.clouddn.com/QQ20151024155030.jpg)
###(3)第三步:接口请求
![a pic](http://7xiz2f.com1.z0.glb.clouddn.com/QQ20151024155041.jpg)
###(4)运行效果
![a pic](http://7qnay5.com1.z0.glb.clouddn.com/step7_20151012223516.png)
##1.2.2 手动创建
在Windows系统下,可以手动创建一个新的项目。
假设目录为: F:\xampp\htdocs\PhalApi
以下是简单的创建操作:
###(1)新建项目目录
在./PhalApi目录下新建一个自己的项目目录,通常以项目名称命名,如项目MyApp对应:
![QQ截图20150404004219](http://webtools.qiniudn.com/20150411005257_929b7fdc7e966f54608b25c2e17def29)
然后,再分别在里面添加接口目录Api、领域目录Domain、数据源目录Model和通用目录Common,即:
![QQ截图20150404004458](http://webtools.qiniudn.com/20150411005257_9008ecb3491a703442f3522a86ffd624)
###(2)准备一个接口
全部的接口类文件需要放置到./Api 目录下,你可以尝试编写一个简单的Default.Index接口,也可以直接将./Demo/Api/Default.php文件复制过来。
###(3)创建访问入口
将./Public/demo目录复制一份为对应项目名称小写的目录,如这里的myapp:
![QQ截图20150404004653](http://webtools.qiniudn.com/20150411005257_e78908f60d6b34c7f932ba15eff1c1a2)
注意!这里需要修改./Public/myapp/index.php和./Public/myapp/checkApiParams.php中的目录:
![QQ截图20150404004731](http://webtools.qiniudn.com/20150411005257_92bff2ed15c72380c54dff46ed800544)
###(4)浏览器访问
在浏览器输入以下链接:
```
http://localhost/phalapi/public/myapp/
```
应该可以看到:
![QQ截图20150404004959](http://webtools.qiniudn.com/20150411005257_33f51b3efcd0938bb7fc36bb813f4808)
##1.2.3 自动生成
在Linux系统下,我们可以使用脚本快速生成一个项目结构,此过程只需要1分钟左右。
简明操作如下:
###(1)使用phalapi-buildapp脚本
phalapi-buildapp脚本用于创建项目,进入 ./PhalApi/PhalApi/ 后,可以看到这个脚本。
不过,首先,需要为这个脚本添加执行权限:
```javascript
$ chmod +x ./phalapi-buildapp
```
然后,调用脚本创建一个MyApp的项目:
```javascript
$ ./phalapi-buildapp MyApp
OK!
```
###(2)查看生成的项目及访问
回到 /path/to/PhalApi 目录,你会发现生成了一个MyApp目录,并且里面的文件如下:
```javascript
$ cd MyApp/
$ tree
.
├── Api
│ └── Default.php
├── Common
├── Domain
├── Model
└── Tests
├── Api
│ └── Api_Default_Test.php
├── Common
├── Domain
├── Model
├── phpunit.xml
└── test_env.php
9 directories, 4 files
```
在Public目录下,则会有myapp的访问入口:
```javascript
└── myapp
├── checkApiParams.php
└── index.php
```
在浏览器访问:
```
#根目录设置为./Public
http://dev.phalapi.com/myapp/
#或没设置根目录为./Public时访问
http://dev.phalapi.com/Public/myapp/
```
可以看到接口结果输出。
###(3)执行单元测试
如果安装了PHPUnit,执行一下单元测试,也是通过的!
```javascript
$ phpunit ./Tests/
PHPUnit 4.3.4 by Sebastian Bergmann.
...
Time: 7 ms, Memory: 5.75Mb
OK (3 tests, 13 assertions)
```
##1.2.4 更多技巧
###(1)日志目录需要0777权限
请确保日志目录Runtime拥有写入的权限,可以给0777 。
###(2)脚本加执行权限和软链
对于脚本命令,需要添加执行权限和软链,便于日后使用:
```javascript
$ cd /pah/to/PhalApi/PhalApi
$ chmod +x ./phalapi-buildapp
$ sudo ln -s /path/to/phalapi-buildapp /usr/bin/phalapi-buildapp
$ chmod +x ./phalapi-buildsqls
$ sudo ln -s /path/to/phalapi-buildsqls /usr/bin/phalapi-buildsqls
$ chmod +x ./phalapi-buildtest
$ sudo ln -s /path/to/phalapi-buildtest /usr/bin/phalapi-buildtest
```
###(3)No such file or directory的解决方案
####解决方案一:增加 /usr/bin/php软链
可以将php的执行路径追加到/usr/bin下,即类似:
```
ln -s /usr/local/php/bin/php /usr/bin/php
```
####解决方案二:使用alias起别名
或者通过使用别名 alias 的方式来注册脚本命令:
```javascript
# vim /etc/bashrc
#PhalApi - 自动生成SQL语句
alias phalapi-buildsqls='/usr/local/php/bin/php /path/to/PhalApi/phalapi-buildsqls'
```
需要注意的是,保存后,需要source一下,即:
```javascript
# source /etc/bashrc
$ source /etc/bashrc
```
***
##1.2.5 三个脚本命令使用说明
###(1) 创建应用项目
如前文所述,可以通过```phalapi-buildapp```脚本来创建一个新的项目,其使用说明如下:
![](http://7xiz2f.com1.z0.glb.clouddn.com/1_20160422210157.jpg)
###(2)生成单元测试骨架代码
当需要对某个类进行单元测试时,可使用```phalapi-buildtest```脚本生成对应的单元测试代码,其使用如下:
![](http://7xiz2f.com1.z0.glb.clouddn.com/3_20160422210251.jpg)
其中,
+ 第一个参数file_path:是待测试的源文件相对/绝对路径
+ 第二个参数class_name:是待测试的类名
+ 第三个参数bootstrap:是测试启动文件,通常是./test_env.php文件
+ 第四个参数author:你的名字,默认是dogstar
通常,可以先写好类名以及相应的接口,然后再使用此脚本生成单元测试骨架代码。
以Default.Index默认接口服务为例,需要为此生成测试骨架代码,可以依次这样操作:
```
$ cd /path/to/PhalApi
$ cd ./Demo/Tests
$ ../../PhalApi/phalapi-buildtest ../Api/Default.php Api_Default ./test_env.php > ./Api/Api_Default_Test.php
```
最后,需要将生成好的代码,重定向保存到你要保存的位置。通常与产品代码对齐,并以“{类名} + _Test.php”方式命名。
###(3)生成数据库建表SQL
当需要创建数据库表时,可以使用```phalapi-buildsqls```脚本结合配置文件dbs.php生成建表SQL,这个工具在创建分表时尤其有用,其使用如下:
![](http://7xiz2f.com1.z0.glb.clouddn.com/2_20160422210230.jpg)
其中,
+ 第一个参数dbs_config:是指向数据库配置文件./Config/dbs.php的路径,可以使用相对路径
+ 第二个参数table:是需要创建sql的表名,每次生成只支持一个
+ 第三个参数engine:(可选)是指数据库表的引擎,可以是:Innodb或者MyISAM
> 温馨提示:需要提前先将建表的SQL语句(除主键id和ext_data字段外)放置到./Data/目录下,文件名为:{表名}.sql。
如,我们需要生成10用户user_session表的的建表语句,那么需要添加数据文件./Data/user_session.sql(除主键id和ext_data字段外):
```
`user_id` bigint(20) DEFAULT '0' COMMENT '用户id',
`token` varchar(64) DEFAULT '' COMMENT '登录token',
`client` varchar(32) DEFAULT '' COMMENT '客户端来源',
`times` int(6) DEFAULT '0' COMMENT '登录次数',
`login_time` int(11) DEFAULT '0' COMMENT '登录时间',
`expires_time` int(11) DEFAULT '0' COMMENT '过期时间',
```
然后,进入到项目根目录,执行命令:
```
$ php ./PhalApi/phalapi-buildsqls ./Config/dbs.php user_session
```
就会看到生成好的SQL语句了,类似:
```
CREATE TABLE `phalapi_user_session_0` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
... ...
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `phalapi_user_session_1` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
... ...
`ext_data` text COMMENT 'json data here',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `phalapi_user_session_2` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
... ...
`ext_data` text COMMENT 'json data here',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `phalapi_user_session_3` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
... ...
`ext_data` text COMMENT 'json data here',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `phalapi_user_session_4` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
... ...
`ext_data` text COMMENT 'json data here',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `phalapi_user_session_5` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
... ...
`ext_data` text COMMENT 'json data here',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `phalapi_user_session_6` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
... ...
`ext_data` text COMMENT 'json data here',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `phalapi_user_session_7` (
... ...
`ext_data` text COMMENT 'json data here',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `phalapi_user_session_8` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
... ...
`ext_data` text COMMENT 'json data here',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `phalapi_user_session_9` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
... ...
`ext_data` text COMMENT 'json data here',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
最后,便可把生成好的SQL语句,导入到数据库,进行建表操作。
####[上一章](/wikis/%5B1.1%5D-%E4%B8%8B%E8%BD%BD%E4%B8%8E%E5%AE%89%E8%A3%85.html) [文档首页](/wikis/) [下一章](/wikis/%5B1.3%5D-%E5%9C%A8%E7%BA%BF%E4%BD%93%E9%AA%8C.html)
- 欢迎使用PhalApi!
- 接口,从简单开始!
- [1.1]-下载与安装
- [1.2]-创建一个自己的项目
- [1.3]-在线体验
- [1.4]-文档、帮助和官网
- [1.10]-对PhalApi框架的抉择
- [1.11]-快速入门(backup)
- [1.12]-参数规则:接口参数规则配置
- [1.13]-统一的接口请求方式:_sevice=XXX.XXX
- [1.14]-统一的返回格式和结构:ret-data-msg
- [1.15]-数据库操作:基于NotORM的使用及优化
- [1.16]-配置读取:内外网环境配置的完美切换
- [1.17]-日记纪录:简化版的日记接口
- [1.18]-快速函数:人性化的关怀
- [1.19]-DI服务速查:各资源服务一览表
- [1.20]-DB操作:数据库基本操作速查
- [1.21]-类的自动加载:遵循PEAR包的命名规范
- [1.22]-签名验证:自定义签名规则
- [1.23]-请求和响应:GET和POST两者皆可得及超越JSON格式返回
- [1.24]-缓存策略:更灵活地可配置化的多级缓存
- [1.25]-国际化翻译:为走向国际化提前做好翻译准备
- [1.26]-数据安全:数据对称加密方案
- [1.27]-精益开发:更富表现力的Model层和重量级数据获取的应对方案
- [1.28]-COOKIE:对COOKIE原生态的支持及记忆加密升级版
- [1.29]-开放与封闭:多入口和统一初始化
- [1.30]-保持的力量:接口开发最佳实践
- [1.31]-新型计划任务:以接口形式实现的计划任务
- [2.11]-核心思想:DI依赖注入-让资源更可控
- [2.12]-海量数据:可配置的分库分表
- [2.13]-接口调试:在线SQL语句查看与性能优化
- [2.14]-测试驱动开发:意图导向编程下的接口开发
- [2.15]-演进:新型计划任务续篇
- [2.16]-领域驱动设计:应对复杂领域业务的Domain层
- [2.17]-微服务:Api接口服务层
- [2.18]-定制化:资源服务的再实现
- [2.19]-扩展库:可重用的扩展类库
- [2.20]-约定编程:架构明显的编程风格
- [2.21]-服务器统一部署方案简明版:CentOs---Nginx---php-fpm---MySql-[--Memcached]
- [2.22]-更多工具:精益项目和团队建设
- [3.1]-扩展类库:微信开发
- [3.2]-扩展类库:代理模式下phprpc协议的轻松支持
- [3.3]-扩展类库:基于PHPMailer的邮件发送
- [3.4]-扩展类库:优酷开放平台接口调用
- [3.5]-扩展类库:七牛云存储接口调用
- [3.6]-扩展类库:新型计划任务
- [3.8]-扩展类库:用户、会话和第三方登录集成
- [3.9]-扩展类库:swoole支持下的长链接和异步任务实现
- [3.11]-扩展类库:基于FastRoute的快速路由
- [4.2]-开发实战2:模拟优酷开放平台接口项目开发
- [4.3]-开发实战3:一个简单的小型项目开发(奔跑吧兄弟投票活动)
- [5.1]-架构与思想:PhalApi核心设计和思想解读
- [5.2]-杂谈:扯一些PhalApi的前世和今生
- [5.3]-框架总结:术语表和PHP开发建议
- [5.4]-许可
- [5.5]-联系和加入我们
- [5.6]-更新日记
- [5.8]-致框架贡献者:加入PhalApi开源指南
- [6.1]-基于接口查询语言的SDK包
- [6.2]-SDK包(JAVA版)
- [6.3]-SDK包(PHP版)
- [6.4]-SDK包(Objective-C版)
- [6.5]-SDK包(javascript版)
- [6.6]-SDK包(Ruby版)
- [8.1]-PhalApi视频教程
- 附录1:接口文档参考模板