mingyuanyun/yii2-iform

超级表单sdk

v1.0.210114 2021-07-21 10:21 UTC

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);
        }
    ]
]
属性含义说明
classiForm组件对应的类名固定值`\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 ]`形式的数组,可通过它修改返回数据的格式