You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PayloadCMS页面保存校验时显示自定义错误提示?

PayloadCMS后台显示自定义错误信息的解决方法

要让后台展示你的自定义错误提示,不能直接抛出普通Error,得改用Payload内置的ValidationError类型,这个类型的错误会被后台UI正确识别并显示具体内容。

修改后的钩子代码

export const revalidateDarkPage: CollectionBeforeChangeHook<Page> = async ({
  data,
  req: { locale, payload, query, routeParams },
}) => {
  const isAutosave = query?.autosave === 'true'

  if (isAutosave || data.darkPage !== true) return data

  // 检查是否已有其他页面启用了darkPage
  const existing = await payload.find({
    collection: 'pages',
    locale,
    where: {
      darkPage: {
        equals: true,
      },
    },
    limit: 1,
  })

  const alreadyExists = existing.docs[0]

  // 如果是更新当前页面则允许,否则抛出验证错误
  if (!!alreadyExists && alreadyExists.id !== routeParams?.id) {
    payload.logger.info(
      'Only one page can be set as Dark Page. Another page already has this enabled.',
    )
    // 改用Payload的ValidationError抛出错误,指定关联字段和提示内容
    throw new payload.errors.ValidationError(
      '只能有一个页面设置为深色主题页面,已有其他页面启用了该设置。',
      {
        fields: {
          darkPage: '只能有一个页面设置为深色主题页面,已有其他页面启用了该设置。',
        },
      },
    )
  }

  return data
}

关键改动说明

  • 替换new Error()为new payload.errors.ValidationError(),这是Payload专门用于验证场景的错误类,能被后台UI正确解析
  • 通过第二个参数的fields配置,把错误信息关联到darkPage字段,错误提示会直接显示在该字段下方,用户能快速定位问题
  • 错误信息支持中文,后台会直接展示自定义内容

修改完成后,当用户尝试设置第二个深色主题页面时,后台就会显示你定义的错误文本,而非默认的“Something went wrong”。

内容的提问来源于stack exchange,提问作者kukkurkurat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:47:35