acfunpro / afcloudstorage
cloud storage by Acfun, Inc.
1.1.7
2018-10-31 04:44 UTC
Requires
- php: >=5.3.0
- dekuan/delib: >=1.0
- dekuan/vdata: >=1.0
- jenssegers/mongodb: ^3.1
README
####安装方法
github 地址
https://github.com/acfunpro/afcloudstorage.git
composer require acfunpro/afcloudstorage
在/config/app.php文件中加入
'afcloud' => array(
'form'=>'admin',
'take' => 10
),
form值用来与url中_afForm参数对比,如果相等则为后台请求,若不设置默认为admin
take值为限制返回条数,默认为20条
在providers中加入
Jenssegers\Mongodb\MongodbServiceProvider::class,
Mews\Purifier\PurifierServiceProvider::class,
在aliases加入
'Mongo' => Jenssegers\Mongodb\MongodbServiceProvider::class,
'Purifier' => Mews\Purifier\Facades\Purifier::class,
在/app/Http/routes.php加入
Route::group( [ 'prefix' => 'api', 'middleware' => 'AfCloud' ] , function(){
Route::resource( "auto" , "AfCloudController" );
});
执行 $ php artisan make:middleware AfCloudMiddleware
生成/app/Http/Middleware/目录下生成AfCloudMiddleware.php
修改handle方法为 因为_afClass是必须存在的,加入中间件判断
public function handle($request, Closure $next)
{
$arrInputData = Input::all();
if( !empty( $arrInputData[ '_afClass' ] ) && ! preg_match( '/[^\w\-]/' , $arrInputData[ '_afClass' ] ) && !empty( $arrInputData[ '_afForm' ] ) && Config::get('app.afcloud.form') == $arrInputData[ '_afForm' ] )
{
return $next($request);
}
else
{
return response('Unauthorized.', 401);
}
}
在加入/app/Http/Kernel.php加入
'AfCloud' => \App\Http\Middleware\AfCloudMiddleware::class,
在/app/Http/Middleware/VerifyCsrfToken.php文件$except中加入
'/api*'
在文件中使用
use acfunpro\afcloudstorage\AfCloudStorage;
// 如果使用vdate
在App\Http\Controllers.php 文件中加入
use dekuan\vdata\CRemote;
function __construct()
{
$this->m_sAcceptedVersion = CRemote::GetAcceptedVersionEx();
}
部署完毕后在根目录执行
php artisan optimize
####说明 采用mongodb存储数据 保留表名:_SetupTables (对所有表的列设置信息) _LogTables (接口请求日志) 请求示例: {url}?_afClass=test&_afWhere={"name":["lk","test%"],"id":["gt":"3"]}&_afOther={"order":["sort","asc"]}
####提供方法 基于RESTful设计原则
$arrOutPutData 接收返回数据
$sErroeMsg 返回错误信息
$nCall 错误码 0为正常
获取全部对象
$AfCloud = AfCloudStorage::GetInstance();
$nCall = $AfCloud->GetIndex( $arrOutPutData, $sErroeMsg );
获取一个对象
$nCall = $AfCloud->GetShow( $arrOutPutData, $sErroeMsg, $id );
创建对象
$nCall = $AfCloud->PostStore( $arrOutPutData, $sErroeMsg );
修改对象
$nCall = $AfCloud->PostStore( $arrOutPutData, $sErroeMsg, $id );
删除对象
$nCall = $AfCloud->GetDestroy( $arrOutPutData, $sErroeMsg, $id );
获取对应表的设置数据 $vFlag为false 返回所有数据 / true 只返回相关的字段
$nCall = $AfCloud->GetTablesColumn( $vFlag = false );
设置参数
参数: $arrMData 键名接受 _afDBTableName,_afArrInputData
_afDBTableName 操作的表名
_afArrInputData 条件设置 _afForm,_afWhere,_afOther
$bFlag false将_afArrInputData的参数覆盖url的参数
true将_afArrInputData的参数追加到url的参数
$nCall = $AfCloud->SetVar( $arrMData = [], $bFlag = false );
获取参数
_afRequestForm 返回值 Index为前台请求 / Admin为后台请求
_afDBTableName 返回值 操作的表名
_afArrInputData 返回值 查询条件
$nCall = $AfCloud->GetVar();
获取对_afid
定义为主键id生成规则:substr(md5(microtime().rand(0,9999).rand(0,9999)),8,16);
$nCall = $AfCloud->GetAfid();
####前台请求URL get {url}?_afClass=test 获取全部对象 实现方法 GetIndex( array & $arrOutputData = [], & $sErroeMsg = '' )
get {url}/1?_afClass=test 获取一个对象 默认字段为id
若字段名为mid则写成
{url}/mid.1
实现方法 GetShow( array & $arrOutputData = [], & $sErroeMsg = '', $id )
post {url}?_afClass=test 创建对象
实现方法 PostStore( array & $arrOutputData = [], & $sErroeMsg = '')
put {url}/1?_afClass=test 修改一个对象 默认字段为id
若字段名为mid则写成
{url}/mid.1
实现方法 PostStore( array & $arrOutputData = [], & $sErroeMsg = '', $id = '' )
delete {url}/1?_afClass=test 删除对象 默认字段为id
若字段名为mid则写成
{url}/mid.1
实现方法 GetDestroy( &$arrOutputData, &$sErroeMsg, $id = '' )
####前台参数 带*为必填 *_afClass = test // 表名 _afForm = admin // 标明来源
_afWhere = {"name":"abc"} // 返回name值为abc的数据
_afWhere = {"id",["gt","5"]} // 返回id大于5的数据
// gt处可选参数
[
'gt' => '>' ,
'ge' => '>=',
'lt' => '<' ,
'le' => '<=',
'eq' => '=' ,
'ne' => '!=',
'lk' => 'like' // {"name",["lk","%name%"]}
];
_afWhere = {"id":["in",["1","2"]]} // 返回id in(1,2)
_afWhere = {"id":["nin",["1","2"]]} // 返回id notin(1,2)
_afWhere = {"sort":["bw",["1","10"]]} // 返回sort为 1到10 之间的数据
_afWhere = {"sort":["nbw",["1","10"]]} // 返回sort为 1到10 之外的数据
// 返回全部数据
_afOther = {"limit":"all"}
// 返回0到10条数据
_afOther = {"limit":"10"}
{"limit":["0","10"]}
// 按照sort排序
_afOther = {"order","sort"} // 倒序
{"order",["sort","asc"]} // 正序
// groupby sid
_afOther = {"group":"sid"}
// 获取排序后的数量
_afOther = {"group":"sid","num":"1"}
// id为2的数据total字段递增
_afWhere={"id":"2"}&_afOther={"inc","total"} // 递增 1
_afWhere={"id":"2"}&_afOther={"inc",["total","5"]} // 递增 5
// id为2的数据total字段递减
_afWhere={"id":"2"}&_afOther={"dec","total"} // 递减 1
_afWhere={"id":"2"}&_afOther={"dec",["total","5"]} // 递减 5
_afWhere={"num":["eq","0"],"_or":{"start":["gt","2"],"end":"2"}} // num等于0 或者 start大于2 或者 end 等于 2
// item = once 返回单条; 默认返回所有; (num, max, min, avg, sum 参数除外)
_afGet = {"num":"1"} // 返回符合条件的总数据量
_afGet = {"max":"id"} // 返回最大id 可选参数有( max, min, avg, sum )
####控制器中调用
// 实例化
$AfCloud = AfCloudStorage::GetInstance();
// 调用SetVar方法设置操作的表
(_SetupTables 表所有操作一定要加_afForm={default_admin})
_afArrInputData 参数:
_afForm 设置请求来源
_afWhere 请求条件
_afOther 排序等操作
_afGet 聚合函数
_arrSelectAllow 设置可查询字段
_afWhere 对应字段名
_afOthrt 可以使用limit/group等操作
_afGet 可以查询聚合函数和count
不可操作设置为 []
_afTake 设置查询条数
以上参数均参考 @前台参数 内容
$AfCloud -> SetVar(
[
'_afDBTableName'=>'_SetupTables',
'_afArrInputData'=>[
'_afForm' => 'admin',
'_afWhere' => '{"_Table":"ouqi"}',
'_afGet' => '{"num":"1"}'
],
'_arrSelectAllow' => [
'_afWhere' => ['status', 'type'],
'_afOther' => [],
'_afGet' => ['num']
]
]
);
$AfCloud->setVar($sArrMData, true);
如果setVar的第二个参数设置为 true 第一个参数内容会覆盖用户输入
// 获取符合条件的所有对象
$AfCloud->GetIndex( array & $arrOutputData = [], & $sErroeMsg = '' );
同 @前台请求方式
####配置表信息设置 _LogTables // 日志表 _SetupTables // 配置表信息
// 配置表字段
_Table // 表名
_Column // 列名
_Type // 类型
_Default // 默认值
_Describe // 描述
_Verify // 验证规则
_Sort // 排序
_Display // 值为1客户端不可见
_Tag // 对应表单标签
// 配置表字段类型
_Table => str // 表名
_Column => str // 列名
_Type => str // 类型
_Default => str // 默认值
_Describe => str // 描述
_Verify => str // 验证规则
_Sort => int // 排序
_Display => int // 客户端不可见
_Tag => str // 对应表单标签
// 配置表字段验证规则
使用validator(laravel框架内自带验证)
_Table => ['required'] // 表名
_Column => ['required'] // 列名
_Type => ['required'] // 类型
_Default => [] // 默认值
_Describe => ['required'] // 描述
_Verify => [] // 验证规则
_Sort => ['number'] // 排序
_Display => ['number'] // 客户端不可见
_Tag => [] //
// 配置表字段描述
_Table => 表名 // 表名
_Column => 列名 // 列名
_Type => 类型 // 类型
_Default => 默认值 // 默认值
_Describe => 描述 // 描述
_Verify => 验证规则 // 验证规则
_Sort => 排序 // 排序
_Display => 客户端不可见 // 客户端不可见
_Tag => 标签 // 标签
####注:
'unique'修改时默认强制忽略当前id
{{url}}/api/auto/ba786617bcebb3d5
如果使用自定义字段可写为
{{url}}/api/auto/id.123 将强制忽略id为123的数据
默认不能访问_SetupTables表中内容,需要在url中添加&form={default_admin},确认是后台请求