| <?php | 
| /** | 
|  * 生成接口代码 | 
|  * | 
|  * - 此脚本可用于生成基本的接口代码,包括Api, Domain, Model | 
|  * - 非必须的,项目可根据自己喜好使用 | 
|  * | 
|  * @author dogstar <chanzonghuang@gmail.com> 2016-05-14  | 
|  */ | 
|   | 
| define('CUR_PATH', dirname(__FILE__)); | 
|   | 
| if ($argc < 3) { | 
|     echo "\n"; | 
|     echo colorfulString("Usage:\n", 'WARNING'); | 
|     echo "   $argv[0] <app_path> <api_path> [author] [overwride]\n"; | 
|     echo "\n"; | 
|   | 
|     echo colorfulString("Options:\n", 'WARNING'); | 
|     echo colorfulString('    app_path', 'NOTE'), "       Require. App relative path to PhalApi\n"; | 
|     echo colorfulString('    api_path', 'NOTE'), "       Require. Api relative path to app_pathe\n"; | 
|     echo colorfulString('    author', 'NOTE'), "         NOT require. Your great name here, default is empty\n"; | 
|     echo colorfulString('    overwride', 'NOTE'), "      NOT require. Whether overwrite, default is false\n"; | 
|     echo "\n"; | 
|   | 
|     echo colorfulString("Demo:\n", 'WARNING'); | 
|     echo "    $argv[0] ./Demo ./User dogstar\n"; | 
|     echo "\n"; | 
|   | 
|     echo colorfulString("Tips:\n", 'WARNING'); | 
|     echo "    This will create Api, Domain, and Model files if successfully.\n"; | 
|     echo "\n"; | 
|   | 
|     exit(1); | 
| } | 
|   | 
| // 接收参数 | 
| $appPath    = CUR_PATH . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . trim($argv[1]); | 
| $apiPath    = str_replace('.php', '', ltrim(ltrim($argv[2], '.'), '/')); | 
| $author     = isset($argv[3]) ? trim($argv[3]) : ''; | 
| $overwrite  = !empty($argv[4]) ? TRUE : FALSE; | 
|   | 
| $appPathRealPath = realpath($appPath); | 
| if (!file_exists($appPathRealPath)) { | 
|     echo colorfulString("$appPath not exists!\n", 'FAILURE'); | 
|     exit(1); | 
| } | 
|   | 
| // 待生成的代码文件 | 
| $apiFilePath    = $appPath . DIRECTORY_SEPARATOR . 'Api' . DIRECTORY_SEPARATOR . $apiPath . '.php'; | 
| $domainFilePath = $appPath . DIRECTORY_SEPARATOR . 'Domain' . DIRECTORY_SEPARATOR . $apiPath . '.php'; | 
| $modelFilePath  = $appPath . DIRECTORY_SEPARATOR . 'Model' . DIRECTORY_SEPARATOR . $apiPath . '.php'; | 
| // 检测是否重复生成 | 
| foreach (array($apiFilePath, $domainFilePath, $modelFilePath) as $file) { | 
|     if (file_exists($file) && !$overwrite) { | 
|         echo colorfulString("$file exists! Stop creating again!\n", 'FAILURE'); | 
|         exit(1); | 
|     } | 
| } | 
|   | 
| // 创建需要的目录 | 
| foreach (array($apiFilePath, $domainFilePath, $modelFilePath) as $file) { | 
|     $toCreateFile = substr($file, 0, strrpos($file, DIRECTORY_SEPARATOR)); | 
|     if (!file_exists($toCreateFile)) { | 
|         echo colorfulString("Start to create folder $toCreateFile ...\n"); | 
|         mkdir($toCreateFile, 0755, TRUE); | 
|     } | 
| } | 
|   | 
| // 准备模板变量 | 
| $API_NAME       = str_replace(DIRECTORY_SEPARATOR, '_', $apiPath); | 
| $AUTHOR_NAME    = $author; | 
| $CREATE_TIME    = date('Y-m-d H:i:s'); | 
| $TABLE_NAME     = strtolower($API_NAME); | 
|   | 
| // 生成代码 | 
| $helperFolder = CUR_PATH . DIRECTORY_SEPARATOR . 'PhalApi' . DIRECTORY_SEPARATOR . 'Helper' . DIRECTORY_SEPARATOR; | 
|   | 
| foreach (array('Api', 'Domain', 'Model') as $type) { | 
|     $apiCode = str_replace( | 
|         array('{%API_NAME%}', '{%AUTHOR_NAME%}', '{%CREATE_TIME%}', '{%TABLE_NAME%}'),  | 
|         array($API_NAME, $AUTHOR_NAME, $CREATE_TIME, $TABLE_NAME),  | 
|         file_get_contents($helperFolder . "_{$type}.php.tpl") | 
|     ); | 
|   | 
|     $maps = array( | 
|         'Api'       => $apiFilePath, | 
|         'Domain'    => $domainFilePath, | 
|         'Model'     => $modelFilePath, | 
|     ); | 
|   | 
|     $toSaveFilePath = $maps[$type]; | 
|   | 
|     echo colorfulString("Start to create file $toSaveFilePath ...\n"); | 
|     file_put_contents($toSaveFilePath, $apiCode); | 
| } | 
|   | 
| echo colorfulString("\nOK! ${apiPath} has been created successfully!\n\n", 'SUCCESS'); | 
|   | 
| function colorfulString($text, $type = NULL) { | 
|     $colors = array( | 
|         'WARNING'   => '1;33', | 
|         'NOTE'      => '1;36', | 
|         'SUCCESS'   => '1;32', | 
|         'FAILURE'   => '1;35', | 
|     ); | 
|   | 
|     if (empty($type) || !isset($colors[$type])){ | 
|         return $text; | 
|     } | 
|   | 
|     return "\033[" . $colors[$type] . "m" . $text . "\033[0m"; | 
| } | 
|   | 
| function genSql($tableName, $tableKey, $sqlContent, $engine, $charset) { | 
|     return sprintf(" | 
| CREATE TABLE `%s` ( | 
|     `%s` bigint(20) unsigned NOT NULL AUTO_INCREMENT, | 
|     %s | 
|     `ext_data` text COMMENT 'json data here', | 
|      PRIMARY KEY (`%s`) | 
|  ) ENGINE=%s DEFAULT CHARSET=%s; | 
|              | 
| ", $tableName, $tableKey, $sqlContent, $tableKey, $engine, $charset); | 
| } |