mingyuanyun / yii2-iform
超级表单sdk
v1.0.210114
2021-07-21 10:21 UTC
Requires
- php: >=7.0
- ext-bcmath: *
- ext-curl: *
- ext-json: *
- ext-pdo: *
- doctrine/dbal: ~2.5.0
- respect/validation: ~1.1.0
Requires (Dev)
- doctrine/instantiator: ~1.0.5
- phpunit/phpunit: ~6.5.0
- yiisoft/yii2: 2.0.0
This package is not auto-updated.
Last update: 2024-10-24 01:21:38 UTC
README
云链超级表单服务SDK,提供表单元数据获取、校验以及动态表单数据入库等功能
安装方法
composer require mingyuanyun/yii2-iform
组件配置
在配置文件components中添加iForm组件
'iForm' => [
'class' => \iForm\yii2\components\IForm::class,
'formServiceConfig' => [
'class' => \iForm\yii2\services\MoasFormService::class,
'appKey' => 'appkey',
'appSecret' => 'appSecret',
'endPoint' => 'https://prod.open-api.mysre.cn/'
],
'connectionConfig' => [
'resolver' => static function () {
$config = [
'dsn' => Yii::$app->db->dsn,
'password' => Yii::$app->db->password,
'username' => Yii::$app->db->username
];
return new \iForm\yii2\db\Yii2Connection($config);
}
]
]
属性 | 含义 | 说明 |
---|---|---|
class | iForm组件对应的类名 | 固定值` \iForm\yii2\components\IForm::class` |
formServiceConfig | 表单服务配置 | 必需,iForm会用这个配置通过` Yii::createObject()` 去创建实例,用于获取表单元数据 |
formServiceConfig.class | 表单服务对应的类名 | 条件可选(resolver未配置时必选),需实现` \iForm\yii2\interfaces\FormServiceInterface` , iForm提供从星图获取表单元数据的服务` \iForm\yii2\services\MoasFormService::class` |
formServiceConfig.appKey | 星图appKey | ` formServiceConfig.class` 为` \iForm\yii2\services\MoasFormService::class` 时必需 |
formServiceConfig.appSecret | 星图appSecret | ` formServiceConfig.class` 为` \iForm\yii2\services\MoasFormService::class` 时必需 |
formServiceConfig.endPoint | 星图开放接口地址 | ` formServiceConfig.class` 为` \iForm\yii2\services\MoasFormService::class` 时必需 |
formServiceConfig.resolver | 表单服务解析器 | 条件可选(class未配置时必选), callable类型, 需返回 ` \iForm\yii2\interfaces\FormServiceInterface` 类型实例 |
formServiceConfig.constructParams | 构造参数列表 | 可选,索引数组,在创建对象时会作为class的构造函数参数,或者resolver函数的参数 |
connectionConfig | 数据库连接服务配置 | 必需, iForm会用这个配置通过` Yii::createObject()` 去创建实例,用于表单数据入库 |
connectionConfig.resolver | 数据库连接服务解析器 | 条件可选(class未配置时必选), callable类型, 需返回 ` \iForm\interfaces\Connection` 类型的实例, iForm提供` \iForm\db\DBALConnection(不依赖yii框架) 和 \iForm\yii2\db\Yii2Connection` |
connectionConfig.class | 数据库连接服务对应的类名 | 条件可选(resolver未配置时必选), 需实现` \iForm\interfaces\Connection` |
yii2 actions配置
通过配置actions,接入方可以直接使用iForm提供的action对外提供接口服务(如保存表单数据、获取表单元数据)
获取表单元数据
超级表单通过星图开放接口统一对外提供表单元数据, 出于安全的考虑, 接入方可以通过服务端代理获取元数据接口, 提供给前端调用
<?php
use iForm\yii2\actions\GetFormMetadataAction;
use iForm\yii2\events\ResponseEvent;
class DemoController extends \yii\web\Controller
{
public function actions()
{
return [
'get-form-metadata' => [
'class' => GetFormMetadataAction::class,
'on responseSuccess' => function (ResponseEvent $event) {
$event->setHandler(function (ResponseEvent $event) {
return ['errcode' => 0, 'errmsg'=> '成功', 'data' => ['metadata' => $event->payload]];
});
},
'on responseError' => function (ResponseEvent $event) {
$event->setHandler(function (ResponseEvent $event) {
return ['errcode' => -1, 'errmsg'=> $event->exception->getMessage(), 'data' => []];
});
}
]
];
}
}
属性 | 含义 | 说明 |
---|---|---|
get-form-metadata.class | 获取表单元数据的action对应的类名 | 必需, 固定值为` \iForm\yii2\actions\GetFormMetadataAction::class` |
get-form-metadata.on responseSuccess | 返回响应成功事件 | 可选, 未配置时会返回 ` ['errmsg' => 'success', 'errcode' => 0, 'data' => $data]` 形式的数组,可通过它修改返回数据的格式 |
get-form-metadata.on responseError | 返回响应错误事件 | 可选, 未配置时会返回 ` ['errmsg' => $message, 'errcode' => -1, 'data' => $data ]` 形式的数组,可通过它修改返回数据的格式 |
保存表单数据
<?php
use iForm\yii2\actions\SaveFormAction;
use iForm\yii2\events\ResponseEvent;
use iForm\yii2\events\SaveFormEvent;
class DemoController extends \yii\web\Controller
{
public function actions()
{
return [
'save-form' => [
'class' => SaveFormAction::class,
'on beforeSave' => function (SaveFormEvent $event) {
$iForm = $event->iForm;
$iForm->getMetadata()->validate(true);
},
'on save' => function(SaveFormEvent $event) {
$data = $event->saveFormModel->data;
Yii::$app->db->createCommand()->insert('custom_table', $data);
$event->handled = true; //拦截iForm的入库逻辑
},
'on afterSave' => function(SaveFormEvent $event) {
//do something
},
'on responseSuccess' => function (ResponseEvent $event) {
$event->setHandler(function (ResponseEvent $event) {
return ['errcode' => 0, 'errmsg'=> '成功', 'data' => $event->payload];
});
},
'on responseError' => function (ResponseEvent $event) {
$event->setHandler(function (ResponseEvent $event) {
return ['isSuccess' => false, 'errorMsg' => $event->exception->getMessage()];
});
},
'syncTableSchema' => function (SaveFormEvent $event) {
return true;
}
]
];
}
}
属性 | 含义 | 说明 |
---|---|---|
save-form | 保存表单数据的action名称 | 必需,可自定义为其他名称 |
save-form.class | 保存表单数据的action对应类名 | 必需, 固定值为` \iForm\yii2\actions\SaveFormAction::class` |
save-from.on beforeSave | 保存表单数据前事件 | 可选, 可以做表单元数据校验、表单数据修改等等操作 |
save-form.on save | 保存表单数据时事件 | 可选, 如果不希望使用iForm默认的数据入库逻辑,则需配置此项,并且需要使用` $event->handled = true` 拦截iForm默认入库逻辑 |
save-form.on afterSave | 保存表单数据后事件 | 可选, 可以做一些数据保存后的处理 |
save-form.on responseSuccess | 返回响应成功事件 | 可选, 未配置时会返回 ` ['errmsg' => 'success', 'errcode' => 0, 'data' => $data]` 形式的数组,可通过它修改返回数据的格式 |
save-form.on responseError | 返回响应错误事件 | 可选, 未配置时会返回 ` ['errmsg' => $message, 'errcode' => -1, 'data' => $data ]` 形式的数组,可通过它修改返回数据的格式 |
save-form.syncTableSchema | 是否同步表结构 | 可选, 默认时true, 如果配置了` on save` 事件且使用` $event->handled = true` 拦截了iForm默认入库逻辑时,该配置不起作用。 如果希望前端添加字段时,数据库能自动增加相应字段,可将此选项设置为true,前提是数据库操作账号有ddl权限,如果预计ddl会影响数据库性能时,可将此值设置为false,提前建表并预留字段(` 推荐` ) |
获取表单数据列表
<?php
use iForm\yii2\actions\GetFormListAction;
use iForm\yii2\events\GetFormListEvent;
class DemoController extends \yii\web\Controller
{
public function actions()
{
return [
'get-form-list' => [
'class' => GetFormListAction::class,
'on beforeGetFormList' => function(GetFormListEvent $event) {
if ($event->formModel->form_code === 'safe_advertise') {
$event->query->orderBy(['time' => SORT_DESC]);
}
}
]
];
}
}
属性 | 含义 | 说明 |
---|---|---|
get-form-list.class | 获取表单数据列表的action对应的类名 | 必需, 固定值为` \iForm\yii2\actions\GetFormListAction::class` |
get-form-list.on beforeGetFormList | 获取表单数据列表前事件 | 未配置时默认取数据表中按主键降序的前100条数据, 可通过修改事件的query属性来改变查询条件和排序 |
get-form-list.on responseSuccess | 返回响应成功事件 | 可选, 未配置时会返回 ` ['errmsg' => 'success', 'errcode' => 0, 'data' => $data]` 形式的数组,可通过它修改返回数据的格式 |
get-form-list.on responseError | 返回响应错误事件 | 可选, 未配置时会返回 ` ['errmsg' => $message, 'errcode' => -1, 'data' => $data ]` 形式的数组,可通过它修改返回数据的格式 |
获取表单数据详情
<?php
use iForm\yii2\actions\GetFormDetailAction;
class DemoController extends \yii\web\Controller
{
public function actions()
{
return [
'get-form-detail' => [
'class' => GetFormDetailAction::class
]
];
}
}
属性 | 含义 | 说明 |
---|---|---|
get-form-detail.class | 获取表单数据详情的action对应的类名 | 必需, 固定值为` \iForm\yii2\actions\GetFormDetailAction::class` |
get-form-detail.on responseSuccess | 返回响应成功事件 | 可选, 未配置时会返回 ` ['errmsg' => 'success', 'errcode' => 0, 'data' => $data]` 形式的数组,可通过它修改返回数据的格式 |
get-form-detail.on responseError | 返回响应错误事件 | 可选, 未配置时会返回 ` ['errmsg' => $message, 'errcode' => -1, 'data' => $data ]` 形式的数组,可通过它修改返回数据的格式 |