3.3 PhalApi 2.x 脚本命令

2018-07-28 21:24 更新

脚本命令的使用

自动化是提升开发效率的一个有效途径。PhalApi致力于简单的接口服务开发,同时也致力于通过自动化提升项目的开发速度。为此,生成单元测试骨架代码、生成数据库建表SQL这些脚本命令。应用这些脚本命令,能快速完成重复但消耗时间的工作。下面将分别进行说明。

phalapi-buildtest命令

当需要对某个类进行单元测试时,可使用phalapi-buildtest命令生成对应的单元测试骨架代码,其使用说明如下:

其中,

  • 第一个参数file_path 是待测试的源文件相对/绝对路径 。
  • 第二个参数class_name 是待测试的类名。
  • 第三个参数bootstrap 是测试启动文件,通常是/path/to/phalapi/tests/bootstrap.php文件。
  • 第四个参数author 你的名字,默认是dogstar。

    通常,可以先写好类名以及相应的接口,然后再使用此脚本生成单元测试骨架代码。以默认接口服务Site.Index接口服务为例,当需要为其生成单元测试骨架代码时,可以执行以下命令。

    $ ./bin/phalapi-buildtest ./src/app/Api/Site.php App\\Api\\Site > ./tests/app/Api/Site_Test.php

    最后,需要将生成好的骨架代码,重定向保存到你要保存的位置。通常与产品代码对齐,并以“{类名} + _Test.php”方式命名,如这里的app/Api/Site_Test.php。

生成的骨架代码类似如下:

<?php


//require_once dirname(__FILE__) . '/bootstrap.php';


if (!class_exists('App\\Api\\Site')) {
    require dirname(__FILE__) . '/./src/app/Api/Site.php';
}


/**
 * PhpUnderControl_App\Api\Site_Test
 *
 * 针对 ./src/app/Api/Site.php App\Api\Site 类的PHPUnit单元测试
 *
 * @author: dogstar 20170725
 */


class PhpUnderControl_AppApiSite_Test extends \PHPUnit_Framework_TestCase
{
    public $appApiSite;


    protected function setUp()
    {
        parent::setUp();


        $this->appApiSite = new App\Api\Site();
    }


    ... ...

简单修改后,便可运行。

phalapi-buildsqls命令

当需要创建数据库表时,可以使用phalapi-buildsqls脚本命令,再结合数据库配置文件./config/dbs.php即可生成建表SQL语句。此命令在创建分表时尤其有用,其使用如下:

其中,

  • 第一个参数dbs_config 是指向数据库配置文件的路径,如./Config/dbs.php,可以使用相对路径。
  • 第二个参数table 是需要创建sql的表名,每次生成只支持一个。
  • 第三个参数engine 可选参数,是指数据库表的引擎,MySQL可以是:Innodb或者MyISAM。
  • 第四个参数sqls_folder 可选参数,SQL文件的目录路径。

    在执行此命令先,需要提前先将建表的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 ./bin/phalapi-buildsqls ./config/dbs.php user_session

    正常情况下,会看到生成好的SQL语句,类似下面这样的输出。

    
    CREATE TABLE `phalapi_user_session_0` (
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      `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 '过期时间',
      `ext_data` text COMMENT 'json data here',
      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 ... ... CREATE TABLE phalapi_user_session_3 ... ... CREATE TABLE phalapi_user_session_4 ... ... CREATE TABLE phalapi_user_session_5 ... ... CREATE TABLE phalapi_user_session_6 ... ... CREATE TABLE phalapi_user_session_7 ... ... CREATE TABLE phalapi_user_session_8 ... ... CREATE TABLE phalapi_user_session_9 ... ...


  
最后,便可把生成好的SQL语句,导入到数据库,完成建表的操作。  


值得注意的是,生成的SQL建表语句默认会带有自增ID主键id和扩展字段ext_data这两个字段。所以保存在./data目录下的建表语句可省略主键字段,以免重复。    
```sql
      `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
      ... ...
      `ext_data` text COMMENT 'json data here',

注意事项

在使用这些脚本命令前,需要注意以下几点。

执行权限

第一点是执行权限,当未设置执行权限时,脚本命令会提示无执行权限,类似这样。

$ ./phalapi/bin/phalapi-buildtest 
-bash: ./phalapi/bin/phalapi-buildtest: Permission denied

那么需要这样设置脚本命令的执行权限。

$ chmod +x ./phalapi/bin/phalapi-build*

编码问题

其次,对于Linux平台,可能会存在编码问题,例如提示:

$ ./phalapi/bin/phalapi-buildtest 
bash: ./phalapi/bin/phalapi-buildtest: /bin/bash^M: bad interpreter: No such file or directory

这时,可使用dos2unix命令转换一下编码。

$ dos2unix ./phalapi/bin/phalapi-buildtest*
dos2unix: converting file ./phalapi/bin/phalapi-buildsqls to Unix format ...
dos2unix: converting file ./phalapi/bin/phalapi-buildtest to Unix format ...

软链

最后一点是,在任意目录位置都是可以使用这些命令的,但会与所在的项目目录绑定。通常,为了更方便使用这些命令,可以将这些命令软链到系统命令下。例如:

$ sudo ln -s /path/to/phalapi/bin/phalapi-buildsqls /usr/bin/phalapi-buildsqls
$ sudo ln -s /path/to/phalapi/bin/phalapi-buildtest /usr/bin/phalapi-buildtest
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号