San*_*ain 29 headless content-management-system strapi
我今天决定使用 Strapi 作为我的作品集的无头 CMS,但我遇到了一些问题,我似乎无法在网上找到解决方案。也许我太无能,无法真正找到真正的问题。
我已经为我的项目设置了一个模式,该模式将存储在 Strapi 中(所有内容都在网络中完成),但是我的自定义组件遇到了一些问题,也就是说,当我运行时它们不是 API 响应的一部分通过邮递员。(不仅仅是空键,而且根本不包含在响应中)。所有其他字段(不是组件)均按预期填写。
起初我认为这可能与权限有关,但一切都已启用,所以不可能是这样,我还尝试查看代码中的 API,但记录的答案也不包含组件。
这是架构中一些字段的图像,但更重要的是响应中未包含的组件。
所以我的问题是,我是否需要在项目中创建某种解析器或任何内容才能包含这些字段,或者为什么不包含它们?
Ice*_*nas 62
我遇到了同样的问题,并且能够通过将 populate=* 添加到 API 端点的末尾来修复它。
例如:
http://localhost:1337/api/test?populate=*
Run Code Online (Sandbox Code Playgroud)
更多信息请参见:https://forum.strapi.io/t/cannot-see-media-field-in-my-endpoint-for-my-content-type/13082/2
编辑:仅使用 populate=* 填充第一级关系。使用 LHS 括号语法(即 [populate]=*)进行更深层次的填充:
例如:
http://localhost:1337/api/test?populate[TestExamples][populate]=*
Run Code Online (Sandbox Code Playgroud)
如果您转到关系人口,请在此处了解更多信息:https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest-api.html#fields-selection
小智 8
只是为了添加已接受的答案,如果您正在使用大量嵌套集合或嵌套组件(例如在单一类型中使用大量自定义组件),那么编写自定义控制器可能是值得的。
我需要渲染一个具有“标题”组件的主页,并且标题有两个可重复的嵌套“按钮”组件。此外,我想呈现一对多关系的“客户端”集合。
由于这个数据结构不会经常改变,所以我刚刚编写了一个自定义控制器,所以我不必在前端担心这个问题。
假设您已经创建了一个主页单一类型来呈现您的主页,控制器将在以下目录中可用:/src/api/homepage/controllers/homepage.js
在下面的示例中,我想渲染Header具有嵌套的组件header_image和具有嵌套集合的buttons组件。Clientsclients
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
}
}));
Run Code Online (Sandbox Code Playgroud)
Strapi V3 和 V4 之间似乎存在显着差异,我发现 V4 中有关填充嵌套组件的文档相当差。我想这将在接下来的几周内更新,因为 Strapi V4 才刚刚发布。
如果有更好的方法来填充深层嵌套的组件或关系,我很乐意听到,但我希望上述内容同时也能帮助一些人。
| 归档时间: |
|
| 查看次数: |
16495 次 |
| 最近记录: |