创建一个自己的项目
有梦想的人学习能力特别强,而且不拒绝任何新东西。 -- 《理想丰满》
1.2.1 可视化安装
将代码上传到服务器并解压后,访问: ./Public/install/ 下的安装向导,如在浏览器打开:
http://dev.phalapi.com/install/
然后按照提示,一步步操作即可:
(0)第零步:同意安装
(1)第一步:环境检查
(2)第二步:系统配置
(3)第三步:接口请求
(4)运行效果
1.2.2 手动创建
在Windows系统下,可以手动创建一个新的项目。
假设目录为: F:\xampp\htdocs\PhalApi
以下是简单的创建操作:
(1)新建项目目录
在./PhalApi目录下新建一个自己的项目目录,通常以项目名称命名,如项目MyApp对应:
然后,再分别在里面添加接口目录Api、领域目录Domain、数据源目录Model和通用目录Common,即:
(2)准备一个接口
全部的接口类文件需要放置到./Api 目录下,你可以尝试编写一个简单的Default.Index接口,也可以直接将./Demo/Api/Default.php文件复制过来。
(3)创建访问入口
将./Public/demo目录复制一份为对应项目名称小写的目录,如这里的myapp:
注意!这里需要修改./Public/myapp/index.php和./Public/myapp/checkApiParams.php中的目录:
(4)浏览器访问
在浏览器输入以下链接:
http://localhost/phalapi/public/myapp/
应该可以看到:
1.2.3 自动生成
在Linux系统下,我们可以使用脚本快速生成一个项目结构,此过程只需要1分钟左右。
简明操作如下:
(1)使用phalapi-buildapp脚本
phalapi-buildapp脚本用于创建项目,进入 ./PhalApi/PhalApi/ 后,可以看到这个脚本。
不过,首先,需要为这个脚本添加执行权限:
$ chmod +x ./phalapi-buildapp
然后,调用脚本创建一个MyApp的项目:
$ ./phalapi-buildapp MyApp
OK!
(2)查看生成的项目及访问
回到 /path/to/PhalApi 目录,你会发现生成了一个MyApp目录,并且里面的文件如下:
$ 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的访问入口:
└── myapp
├── checkApiParams.php
└── index.php
在浏览器访问:
#根目录设置为./Public
http://dev.phalapi.com/myapp/
#或没设置根目录为./Public时访问
http://dev.phalapi.com/Public/myapp/
可以看到接口结果输出。
(3)执行单元测试
如果安装了PHPUnit,执行一下单元测试,也是通过的!
$ 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)脚本加执行权限和软链
对于脚本命令,需要添加执行权限和软链,便于日后使用:
$ 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 的方式来注册脚本命令:
# vim /etc/bashrc
#PhalApi - 自动生成SQL语句
alias phalapi-buildsqls='/usr/local/php/bin/php /path/to/PhalApi/phalapi-buildsqls'
需要注意的是,保存后,需要source一下,即:
# source /etc/bashrc
$ source /etc/bashrc
1.2.5 三个脚本命令使用说明
(1) 创建应用项目
如前文所述,可以通过phalapi-buildapp
脚本来创建一个新的项目,其使用说明如下:
(2)生成单元测试骨架代码
当需要对某个类进行单元测试时,可使用phalapi-buildtest
脚本生成对应的单元测试代码,其使用如下:
其中,
- 第一个参数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,这个工具在创建分表时尤其有用,其使用如下:
其中,
- 第一个参数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语句,导入到数据库,进行建表操作。
(4)生成接口代码 - V1.3.4及以上版本支持
当需要编写开发一个接口时,可以使用phalapi-buildcode
脚本生成基本的Api、Domain和Model代码。此脚本不是很强悍的,项目可以根据自己的喜欢使用,或者修改定制自己的模板。其使用如下:
其中,
- 第一个参数app_path:是指项目根目录到你的项目的相对路径
- 第二个参数api_path:是需要创建接口的相对项目的相对路径,支持多级目录,可不带.php后缀
- 第三个参数author:(可选)你的名字,默认为空
- 第四个参数overwrite:(可选)是否覆盖已有的代码文件,默认为否
例如,我们要为Demo项目生成一个新的接口文件./AA/BB/CC.php,则可以:
$ cd /path/to/PhalApi
$ ./PhalApi/phalapi-buildcode Demo AA/BB/CC dogstar
Start to create folder /mnt/hgfs/F/PHP/PhalApi/PhalApi/../Demo/Api/AA/BB ...
Start to create folder /mnt/hgfs/F/PHP/PhalApi/PhalApi/../Demo/Domain/AA/BB ...
Start to create folder /mnt/hgfs/F/PHP/PhalApi/PhalApi/../Demo/Model/AA/BB ...
Start to create file /mnt/hgfs/F/PHP/PhalApi/PhalApi/../Demo/Api/AA/BB/CC.php ...
Start to create file /mnt/hgfs/F/PHP/PhalApi/PhalApi/../Demo/Domain/AA/BB/CC.php ...
Start to create file /mnt/hgfs/F/PHP/PhalApi/PhalApi/../Demo/Model/AA/BB/CC.php ...
OK! AA/BB/CC has been created successfully!
可以看到生成的代码有:
访问接口:
最后,在线接口列表,可以看到: