Dcat Admin 判断文件重新上传后如何重置某些字段的值?

情况是这样的,我做了一个报告相关的功能,先上传 PDF,然后生成一页页的图片,有一个页数和生成时间字段,我想要在报告文件重新上传的时候重置一下页数和生成时间字段,设置为 null,因为修改了上传文件需要重新生成报告图片,但是我发现一个问题,我是在 saving 里面判断现在上传的文件和之前的文件是否一致,但是我发现文件上传完成后,数据库里面的文件路径字段已经被修改成最新了,导致 $form->file_path$form->model()->file_path 一致,请问这个有什么办法吗?

代码如下:

/**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        return Form::make(new Report(), function (Form $form) {
            $form->text('title')->required()->rules('required|max:255');
            $form->image('cover')->required()->rules('required|image|dimensions:min_width=400')->resize(540, 300)->uniqueName()->move("images/report/cover/" . date("Y/m/d", time()))->help('推荐尺寸:540px * 300px,宽度不能小于400px')->removable(false)->autoUpload();
            $form->textarea('summary')->rows(5)->required();
            $form->file('file_path')->required()->rules('required|file|mimetypes:application/pdf')->accept('pdf', 'application/pdf')->maxSize(20480)->uniqueName()->move("files/report/pdf/" . date("Y/m/d", time()))->help('目前只允许上传PDF格式的报告,大小不超过20M')->removable(false)->autoUpload();
            $form->switch('is_show')->default(false);
            $form->switch('is_top')->default(false);
            $form->text('review_count')->default(0)->readOnly();
            $form->text('download_count')->default(0)->readOnly();
            $form->text('share_count')->default(0)->readOnly();
            $form->text('collection_count')->default(0)->readOnly();
            $form->text('total_page')->readOnly();
            $form->text('start_page')->rules('nullable|numeric|min:1');
            $form->text('end_page')->rules('nullable|numeric|min:1|required_with:start_page');
            $form->switch('is_vip')->default(false);
            $form->datetime('created_at')->default(now());
            $form->hidden('admin_user_id');
            $form->hidden('generated_at');

            $form->disableDeleteButton();
            $form->disableCreatingCheck();
            $form->disableEditingCheck();
            $form->disableViewCheck();

            //  后台发布报告,admin_user_id根据管理员来
            $form->saving(function (Form $form) {
                if($form->isCreating()) {
                    //  创建时
                    $form->admin_user_id = Admin::user()->id;
                }else {
                    if(!is_null($form->file_path) && ($form->file_path != $form->model()->file_path)) {
                        //  判断报告文件是否有重新上传
                        $form->total_page = null;
                        $form->generated_at = null;
                    }
                }
            });
        });
    }
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案
$form->image('icon')
                ->uniqueName()
                ->retainable()
                ->autoUpload()
                ->chunkSize(1024)
                ->removable(false)
                ->autoSave(false)
                ->downloadable();

把 autoSave 设置为 false

1年前 评论
ljheisenberg (楼主) 1年前
讨论数量: 7

试试上传之前用字段存上旧的链接,saving 的时候 use 这个变量去比较

1年前 评论
ljheisenberg (楼主) 1年前

saving 事件的时候,模型字段是已经改变,准备存入数据库的状态,用 getOriginal检查属性变更最下面)获取原始值:

        if (!is_null($form->file_path) && ($form->file_path != $form->model()->getOriginal('file_path'))) {
            //  判断报告文件是否有重新上传
            $form->total_page = null;
            $form->generated_at = null;
        }
1年前 评论
ljheisenberg (楼主) 1年前
ljheisenberg (楼主) 1年前
$form->image('icon')
                ->uniqueName()
                ->retainable()
                ->autoUpload()
                ->chunkSize(1024)
                ->removable(false)
                ->autoSave(false)
                ->downloadable();

把 autoSave 设置为 false

1年前 评论
ljheisenberg (楼主) 1年前