codecamp

创建一个自己的项目

有梦想的人学习能力特别强,而且不拒绝任何新东西。 -- 《理想丰满》

1.2.1 可视化安装

将代码上传到服务器并解压后,访问: ./Public/install/ 下的安装向导,如在浏览器打开:

http://dev.phalapi.com/install/

然后按照提示,一步步操作即可:

(0)第零步:同意安装

a pic

(1)第一步:环境检查

a pic

(2)第二步:系统配置

a pic

(3)第三步:接口请求

a pic

(4)运行效果

a pic

1.2.2 手动创建

在Windows系统下,可以手动创建一个新的项目。

假设目录为: F:\xampp\htdocs\PhalApi
以下是简单的创建操作:

(1)新建项目目录

在./PhalApi目录下新建一个自己的项目目录,通常以项目名称命名,如项目MyApp对应:

QQ截图20150404004219

然后,再分别在里面添加接口目录Api、领域目录Domain、数据源目录Model和通用目录Common,即:

QQ截图20150404004458

(2)准备一个接口

全部的接口类文件需要放置到./Api 目录下,你可以尝试编写一个简单的Default.Index接口,也可以直接将./Demo/Api/Default.php文件复制过来。

(3)创建访问入口

将./Public/demo目录复制一份为对应项目名称小写的目录,如这里的myapp:

QQ截图20150404004653

注意!这里需要修改./Public/myapp/index.php和./Public/myapp/checkApiParams.php中的目录:

QQ截图20150404004731

(4)浏览器访问

在浏览器输入以下链接:

http://localhost/phalapi/public/myapp/

应该可以看到:

QQ截图20150404004959

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!

可以看到生成的代码有:

访问接口:

最后,在线接口列表,可以看到:

下载与安装
在线体验
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

八、视频教程

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }