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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:20:40