strapi - Strapi 自定义控制器从管理 UI 执行
问题描述
我正在为我的一个模型扩展一个创建控制器:
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;
},
例如,如果我从 Postman 发出请求,它可以正常工作,但是如果用户从管理 UI 创建新对象,是否可以这样做?
当我从邮递员发送请求时看到来自 Strapi 的控制台时:
debug POST /complaints (58 ms) 200
但是,如果我从管理 UI 创建一个新对象,我会看到:
debug POST /content-manager/explorer/application::complaint.complaint (1017 ms) 200
有任何想法吗?甚至可能吗?我正在使用最新的 Strapi 版本 (v3) 谢谢
解决方案
如果你想从 Admin UI 执行某些东西,我想你可能想看看如何使用生命周期钩子在模型中实现它。
https://strapi.io/documentation/developer-docs/latest/development/backend-customization.html#models
据我所知,控制器只调用 API,而服务是一组可重用的函数。模型由 API 和管理 UI 调用。
投诉/模型/complaint.js
module.exports = {
lifecycles: {
afterCreate(result, data) {
strapi.emitToAllUsers('complaint::created', result);
}
}
};
您还可以在服务中创建一个函数并将其称为模型生命周期钩子。
推荐阅读
- c# - ASP NET Identity - 有条件地检查 RequireConfirmedPhoneNumber
- node.js - 已安装全局 NPM 包,但未找到可执行文件,Windows 10
- php - Laravel 中间件上的 cURL 错误尝试读取 null 的属性头
- python - 按下时将动态创建的按钮信息传递给函数。kivymd, kivy, 蟒蛇
- python-3.x - matplotlib 与线图重叠,所以我得到一条粗线 - 它也与 x 轴文本重叠
- typescript - Typescript 自定义库导入问题
- r - 如何使用间隔为 12 年的 ARIMA 面板数据?
- django - Django admin - 自定义表单域
- python - 如何在遗传算法中解码个体?
- powershell - 在 DHCP 保留中更新 MAC 地址会删除其他变量