Skip to content
导航栏

Form 钩子函数

替换 Form 的默认处理器,可自定义 form 处理的过程,

钩子函数分两类:一类是完全替换整个功能,另外一类是不修改内置功能,而是进行补丁。

第一类,比如要创建一个用户主数据记录,yao 本身就内置了一个处理器yao.form.save,用于把数据保存到数据库中。如果不需要把数据保存到数据库,而是把数据通过 http 接口传输到另外一个系统时,可以通过配置action.save来设置一个自定义的action处理器。

action

操作默认处理器参数
settingyao.form.Settingform_id, xpath, method, query
componentyao.form.Componentform_id, xpath, method, payload
uploadyao.form.Uploadform_id, xpath, method, file
downloadyao.form.Downloadform_id, field_name, query_name, token
findyao.form.Findform_id, primary_key
saveyao.form.Saveform_id, payload
createyao.form.Createform_id, payload
updateyao.form.Updateform_id, primary_key, payload
deleteyao.form.Deleteform_id, payload
json
{
  "action": {
    "find": {
      "process": "", //处理器名称,必选
      "bind": "", //处理器名称,同process【可选】
      "guard": "bearer-jwt", //处理器名称,常见的有bearer-jwt,-。【可选】
      "default": [] //默认参数值【可选】
    }
  }
}

第二类需求,在把数据保存到数据库之后或是之前,进行数据处理,可以使用before或是after action处理器。

注意:在钩子函数中报错或是 error 只会记录在日志文件里,不会影响整个流程,所以当需要错误处理时,最好选择第一类钩子函数进行增强处理。

Hook:

使用 hook 函数可以增强 Form 的处理过程,比如 find 处理器使用默认的处理器,使用 before 与 after 处理器增强默认处理器的行为。

  • before:find
  • after:find
  • before:save
  • after:save
  • before:create
  • after:create,传入参数是记录创建后的主键值,一般是 autoid
  • before:delete
  • after:delete
  • before:update
  • after:update

比如:

json
{
  "action": {
    "after:find": "scripts.license.AfterFind",
    "before:delete": "scripts.license.BeforeDelete"
  }
}

hook 函数参数

before 处理器的输入参数与默认处理器输入参数保持一致,before 处理器输出返回值需要与默认处理器的输入参数保持一致,由于 yao 处理器的特殊性,返回值如果不是 null,都需要返回数组。

js
function beforeSave(payload) {
  if (!payload.public_key && !payload.private_key) {
    const keyObj = Process('plugins.license.create');
    payload.public_key = keyObj.public_key;
    payload.private_key = keyObj.private_key;
    payload.key_hash = keyObj.key_hash;
  }

  return [payload]; //返回数组
}

after 处理器的输入参数是默认处理器的返回值,after 处理器输出返回值需要与默认处理器的输出参数保持一致。

也既是只要了解默认处理器的传入参数与返回值,可以推算出 before 与 after 处理器的参数与返回值。