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

Laravel Backpack PageManager无法添加页面:template字段无默认值

Laravel Backpack PageManager 添加页面时 template 字段无默认值错误解决

问题描述

在Laravel Backpack项目中使用PageManager插件添加新页面时,触发数据库错误:

SQLSTATE[HY000]: General error: 1364 Field 'template' doesn't have a default value

对应的插入SQL语句未包含template字段:

INSERT INTO
  `pages` (
    `name`,
    `title`,
    `slug`,
    `content`,
    `extras`,
    `updated_at`,
    `created_at`
  )
VALUES
  (
    'dghj',
    'fghj',
    'fghj',
    ?,
    '{ "meta_title": NULL, "meta_description": NULL, "meta_keywords": NULL }',
    '2022-09-12 16:19:59',
    '2022-09-12 16:19:59'
  )

补充现象:

  • 在CRUD视图选择模板时,会弹出确认框,确认后URL会追加?template=standard这类GET参数
  • 搭建仅包含Laravel、Backpack和PageManager的纯净环境可正常运行,排除插件本身bug
  • 已安装依赖PageManager的MenuCRUD插件,且运行正常
  • 环境信息:PHP 8.1.9,Backpack 5.3.12

排查与解决方法

1. 检查自定义PageCrudController是否覆盖默认逻辑

如果项目中自定义了PageCrudController(路径通常为app/Http/Controllers/Admin/PageCrudController.php),需确认:

  • 控制器是否正确继承自Backpack\PageManager\app\Http\Controllers\Admin\PageCrudController
  • 未重写store方法或请求处理逻辑,避免URL中的template参数未被读取并填充到插入数据中

2. 验证中间件是否过滤template参数

检查全局中间件或Admin路由组的中间件,是否存在过滤GET/POST参数的逻辑,导致template参数被丢弃。可在store方法中临时添加调试代码:

dd(request()->all());

执行创建操作后,查看输出结果是否包含template参数,确认参数是否成功传递到控制器。

3. 修复数据库template字段的默认值配置

若数据库中pages表的template字段未设置默认值,即使插件逻辑正常,插入时也会触发错误。执行以下SQL语句查看字段属性:

DESCRIBE pages;

如果template字段的Default为NULL且Null列为NO,则执行以下语句添加默认值(以standard为例):

ALTER TABLE pages MODIFY COLUMN template VARCHAR(255) NOT NULL DEFAULT 'standard';

4. 确认路由未被自定义覆盖

检查项目中的自定义路由文件(如routes/backpack/custom.php),是否存在定义admin/page/create的路由,导致PageManager的默认路由被覆盖,无法处理template参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:35:11