Dcat Admin 动态显示的表单,提交时没有值

环境

Mac OS
Laravel:8.83.27
PHP:7.3

描述

我使用Form::make生成表单,部分表单的显示通过URL的参数显示,例如参数category_id=1就显示某个表单,实现动态表单功能。

简化代码如下:
其中warehouse_report字段并不存在于模型Lease中,而是自行设置的。

 protected function form()
    {
        return Form::make(\App\Models\Lease::class, function (Form $form) {
            $categoryId = request()->get('category_id');
            if ($categoryId == 1) {
                $form->multipleImage('warehouse_report', '验证报告')->autoUpload()->uniqueName();
            }
   });
    }

问题

我在没有使用if条件判断的时候,加载出页面,上传图片,提交表单,提交载荷中存在warehouse_report字段和它的值,但是使用if后,先设置URL中参数为2(不显示表单),后来设置成1(显示表单),此时上传图片提交内容,载荷中warehouse_report字段的值就是空的
为什么会这样呢?怎么才能表单有值?

截图

无判断

Dcat Admin 动态显示的表单,提交时没有值

有判断提交

Dcat Admin 动态显示的表单,提交时没有值

PS:为什么不用when做动态表单?
因为表单是必填的,提交时没有使用的隐藏表单会阻碍提交,且有同名column提交问题。

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
最佳答案

最后使用when来做,提交的时候就有值。 when里面同名的字段加上不同的类型后缀,提交的时候,判断选择的是哪个类型,然后把不相干的字段删除,把需要的字段去掉后缀。

10个月前 评论
讨论数量: 8

你这个截图参数不都是2么

11个月前 评论
fishshadow (楼主) 11个月前

楼主找到解决方法了吗,我在文件上传的时候也会丢失get参数导致表单报错

10个月前 评论
fishshadow (楼主) 10个月前

最后使用when来做,提交的时候就有值。 when里面同名的字段加上不同的类型后缀,提交的时候,判断选择的是哪个类型,然后把不相干的字段删除,把需要的字段去掉后缀。

10个月前 评论

今天又遇到这个问题了,不知道算不算框架的 bug。现在做法是在表单初始化时就默认给分类一个值,让动态的表单被初始化构建一下(而不是在选择之后再出现),这样提交时 file 类型的字段就带上值了

10个月前 评论

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