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
相关产品推荐
相关产品推荐

