Strapi自定义控制器从管理界面执行

时间:2020-06-01 03:24:33

标签: strapi headless-cms

我正在为我的一个模型扩展一个创建控制器:

...

export REPO_OS_OVERRIDE=linux

# ANDROID SDK
export ANDROID_HOME=/home/yaorc/android/sdk
export ANDROID_SDK_ROOT=/home/yaorc/android/sdk
export PATH=$PATH:${ANDROID_HOME}/emulator
export PATH=$PATH:${ANDROID_HOME}/tools:${ANDROID_HOME}/tools/bin
export PATH=$PATH:${ANDROID_HOME}/platform-tools
export PATH=$PATH:${ANDROID_HOME}/build-tools/29.0.3
export PATH=$PATH:${ANDROID_HOME}/platforms/android-29

例如,如果我从Postman发出请求,效果很好,但是如果用户从Admin UI创建新对象,是否可以这样做?

当我从邮递员发送请求时,从Strapi看到控制台时:

async create(ctx) {
    let entity;
    if (ctx.is('multipart')) {
      const { data, files } = parseMultipartData(ctx);
      entity = await strapi.services.complaint.create(data, { files });
    } else {
      entity = await strapi.services.complaint.create(ctx.request.body);
    }
    const sanitized = sanitizeEntity(entity, { model: strapi.models.complaint });
    strapi.emitToAllUsers('complaint::created', sanitized);
    return sanitized;
  },

但是,如果我从管理用户界面创建新对象,则会看到以下内容:

debug POST /complaints (58 ms) 200

有什么想法吗?可能吗我正在使用最新的Strapi版本(v3) 谢谢

1 个答案:

答案 0 :(得分:1)

如果您想从 Admin UI 执行某些操作,我想您可能想看看如何使用生命周期挂钩在模型中实现它。

https://strapi.io/documentation/developer-docs/latest/development/backend-customization.html#models

据我所知,控制器只调用 API,而服务是一组可重用的功能。模型由 API 和管理界面调用。

complaint/models/complaint.js

module.exports = {
  lifecycles: {
    afterCreate(result, data) {
       strapi.emitToAllUsers('complaint::created', result);
    }
  }
};

您还可以在服务中创建一个函数并将其称为模型生命周期钩子。