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;
                    }
                }
            });
        });
    }
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 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年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!