只是为了补充已接受的答案,如果您正在使用大量嵌套集合或嵌套组件(例如在单一类型中使用大量自定义组件),那么编写自定义控制器可能是值得的。
我需要渲染一个主页,其中包含一个“标题”组件,并且该标题有两个可重复的嵌套“按钮”组件。此外,我想呈现一个“客户”的集合,这是一个一对多的关系。
由于这个数据结构不会经常变化,我只是写了一个自定义的控制器,所以前端不用担心这个。
假设您创建了一个 Homepage Single Type 来呈现您的主页,控制器将在以下目录中可用:/src/api/homepage/controllers/homepage.js
在下面的示例中,我想用嵌套的header_image 和buttons 渲染Header 组件,以及用嵌套的clients 集合渲染Clients 组件。
const { createCoreController } = require('@strapi/strapi').factories;
module.exports = createCoreController('api::homepage.homepage', ({ strapi }) => ({
async find(ctx) {
const populateList = [
'Header.header_image',
'Header.buttons',
'Clients.clients'
]
// Push any additional query params to the array
populateList.push(ctx.query.populate)
ctx.query.populate = populateList.join(',')
const content = await super.find(ctx)
return content
}
}));
Strapi V3 和 V4 之间似乎存在显着差异,我发现关于填充嵌套组件的文档对于 V4 来说非常糟糕。我想这将在接下来的几周内更新,因为 Strapi V4 刚刚发布。
如果有更好的方法来填充深度嵌套的组件或关系,我很乐意听到,但我希望上述内容同时也能帮助一些人。