手工制作的polygon框架
这个小框架是paperen3年前就写了,但说来惭愧一直闭源同时模型层糟糕,最近抽空将模型层丰富与抽象了接近可用程度才敢拿出来开源,暂且给个0.0.1版本...
代码确实是一般般,但作为平时快速搭建与开发接口来说也还勉强够用,如各位大佬发现有什么可以改进的话或bug随时吐槽
git地址:https://github.com/paperen/polygon
下面为polygon的README
polygon框架
- 编写始于插件化/模块化思想
- 适合快速编写简单的接口
- 半自动转换中英语言
如何开始
- git clone到本地后
- composer update
- 修改config/config.php(按实际情况调整数据库信息,区分develop/test/production三种环境配置,关于环境常量参见index.php中的ENV)
- 浏览器访问 本地地址+/api/index
- clone下来自带存在两个模块
admin
与api
,admin
是后台(只有一个登录页,没写什么逻辑,不是重点)仅提示也可以做成后台或前台等,重点是api
- /api/index - API模块
- /admin/login - admin模块
具体指向哪个控制器方法需要对照分别模块中路由映射
示例
为方便入手,你可以先复制以下SQL到库里执行
CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(50) DEFAULT NULL COMMENT '用户名', `password` char(32) DEFAULT NULL COMMENT '密码', `salt` char(6) DEFAULT NULL COMMENT '密码盐', `last_login` int(10) unsigned DEFAULT NULL COMMENT '上次登录时间戳', `username_en` varchar(255) DEFAULT NULL COMMENT '用户名(英文)', `enabled` tinyint(1) unsigned DEFAULT '1' COMMENT '是否启用(0-否 1-是)', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; CREATE TABLE `admin` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(50) DEFAULT NULL COMMENT '用户名', `password` char(32) DEFAULT NULL COMMENT '密码', `salt` char(6) DEFAULT NULL COMMENT '密码盐', `last_login` int(10) unsigned DEFAULT NULL COMMENT '上次登录时间戳', `username_en` varchar(255) DEFAULT NULL COMMENT '用户名(英文)', `enabled` tinyint(1) unsigned DEFAULT '1' COMMENT '是否启用(0-否 1-是)', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; INSERT INTO `admin` VALUES ('1', 'test', '1234', '1234', '1234', 'test_en', '1');
然后访问
/api/scaffold
,会自动生成出admin模型(位于api/models目录)- 访问
/api/admin
、/api/admin_detail?id=1
查看输出结果(查询) - 访问
/api/admin_update
,查看admin数据表中的数据(更新) /api/admin_delete
,查看admin数据表中的数据(删除)/api/admin_add
,查看admin数据表中的数据(插入)/api/admin_add_multi
,查看admin数据表中的数据(批量插入)
到此例子已结束,代码也比较简单可以打开api/controllers/index.php
查看到
路由
约定每个plugins
都可以拥有自己的路由规则,路由文件位于每个plugin中的config目录config.php
,以下为api模块中的路由规则
// 仅供示范 'admin' => 'index/index', 'admin_detail' => 'index/detail', 'admin_update' => 'index/update', 'admin_delete' => 'index/delete', 'admin_add' => 'index/add', 'admin_add_multi' => 'index/add_multi',
半自动切换中英语言
在作为api使用时,若前端请求头中带有lang
字段的话,会按照lang的值返回不同的数据,字段结构都一样的,可以使用postman在header中加上lang
为en,请求以下/api/admin
接口对比以下不加lang
请求返回的username
字段数值
控制器中重写$_field_map
变量
获取到每个数据单位后调用_translate
即会自动对相关字段转换中英
比如下面的例子,对于接口输出来说只有一个字段username
例如:
/** * 需要翻译的字段 * @var array */ protected $_field_map = array( 'cn' => array( 'username' => 'username', 'username_en' => '', ), 'en' => array( 'username' => '', 'username_en' => 'username', ), ); $admin = array( 'username' => '中文', 'username_en' => 'english', ); $this->_translate($admin); print_r($admin)
链式db操作
支持链式操作方式
// 查询
$data = $model->fields(array(
'id',
'last_login',
'username',
'username_en',
))
->where(array('enabled'=>1))
->pagination($page, 10)
->select();
// 更新
$model->where(array('id'=>1))
->update(array(
'username' => 'username',
'username_en' => 'username_en',
'last_login' => time(),
));
fields
设置查询哪些字段
参数类型:数组
where
设置条件
参数类型:数组
pagination
分页
参数类型:整数(当前页数、每页查询条数)
alias
设置表别名
无参数
join
设置join
参数 | 说明 | 必填 |
---|---|---|
table | 表 | 是 |
on | on | 是 |
type | left/right/inner,默认为空 | 否 |
select
获取全部数据
无参数
find
获取第一条数据
无参数
insert
插入数据
参数类型:数组
insert_batch
插入多个数据
参数类型:数组
update
更新
参数类型:数组
delete
删除
无参数
get_by_pk
获取某个主键为x的记录
参数类型:int
all
获取多条数据
参数 | 说明 | 必填 |
---|---|---|
limit | 每次查询条数,默认10 | 否 |
offset | 查询游标,默认0 | 否 |
total
获取总条数
无参数
order
设置排序规则
参数 | 说明 | 必填 |
---|---|---|
field | 排序字段 | 是 |
order_by | 排序规则,默认为desc | 否 |
脚手架自动生成模型文件
若自己增加一个模块可以通过脚手架生成是所有模型,用法很简单
use libscaffold;
在任何一个方法中
scaffold::run(模块名称);
若某个表不需要生成模型,run方法可以传递第二个参数过滤掉
$exclude = array('test');
scaffold::run('api', $exclude);
日志
可以调用全局save_log
方法打日志
在develop环境里100%会生成日志cache目录,对于非develop环境仅在错误等级为error才会记录到日志
参数 | 说明 | 必填 |
---|---|---|
$msg | 日志内容 | 是 |
$level | 日志等级,默认为debug | 否 |
注意:若无法生成日志,请确保根目录允许生成cache目录或手动创建cache目录并允许php写入
評論
0沒有任何評論