Backpack for Laravel v5中重写store函数失败求助
解决Backpack for Laravel v5中重写store函数无法添加字段的问题
你当前的写法无法生效,核心原因是strippedRequest闭包的设计逻辑——它需要返回最终要存入数据库的字段数组,而非仅修改请求对象。以下是两种可靠的修复方案:
方案1:修正strippedRequest的用法
直接在返回的字段数组中包含手动设置的end值,无需依赖修改请求对象:
public function store() { $this->crud->set('strippedRequest', function($request) { // 合并原有请求字段与手动设置的end值 return array_merge( $request->except(['_save_action', '_token', '_http_referrer']), ['end' => '2023-02-01 14:00:00'] ); }); return $this->traitStore(); }
方案2:使用beforeValidation钩子(更贴近v4逻辑,推荐)
改用Backpack提供的beforeValidation操作设置,在验证前直接修改请求对象,后续的验证、保存流程都会自动使用修改后的数据,和v4的写法逻辑一致:
public function store() { $this->crud->setOperationSetting('beforeValidation', function($request) { // 还原v4中的自动计算逻辑,注意将时间戳转为数据库兼容的datetime格式 $start = $request->get('start'); $endTimestamp = strtotime('+1 hour', strtotime($start)); $request->merge(['end' => date('Y-m-d H:i:s', $endTimestamp)]); }); return $this->traitStore(); }
额外检查项
确保你的模型$fillable属性包含end字段,或者在CrudPanel配置中已添加该字段(即使设置为隐藏字段),否则Laravel的批量赋值保护会阻止该字段被存入数据库。
内容的提问来源于stack exchange,提问作者chrisM
相关产品推荐
相关产品推荐

