DcatAdmin框架的radio、select使用

1. 运行环境#

1). 当前使用的 Laravel 版本?#

Laravel Framework 9.52.16

2). 当前使用的 php/php-fpm 版本?#

PHP 版本:PHP 8.0.2 (cli)

php-fpm 版本:

3). 当前系统#

Windows 10

4). 业务环境#

开发环境

5). 相关软件版本#

PHPStudy
//: <> (提供相关软件的版本,如 Nginx 、MySQL、MongoDB 等)

2. 问题描述?#

$form->radio('status', '审核')->options([
                1 => '审核通过',
                2 => '驳回'
            ])->required()

            ->when(1, function (Form $form) {
                $form->select('car_id', '车辆选择')->options(function () {
                    $demo = new Car();
                    // 查询所有状态为可用的车辆
                    $availableCars = $demo->model()
                    ->where('status', 0)
                    ->get()
                    ->mapWithKeys(function ($car) {
                        return [$car->id => $car->id . ' - ' . $car->car_num];
                    })->toArray();
                    // 添加一个默认选项
                    return ['' => '请选择车辆'] + $availableCars;
                })->saving(function ($value) {
                    // 在保存表单时,更新选定车辆的状态为1
                    if (!empty($value)) {
                        $dcar = new Car();
                        $car = $dcar->model()
                        ->where('id', $value)
                        ->first();
                        if ($car) {
                            $car->status = 1;
                            $car->save();
                        }
                    }
                    return $value;
                });
            })

3. 您期望得到的结果?#

Laravel

Laravel

如图,有一个 radio(审核)
我希望在选择审核通过时将下面的 select(车辆选择)设置为 required,在选择驳回时,则不需要选择
然而我写的这段代码在选择驳回时,无法提交,(应该是两个 when 都发挥作用了,导致 select 还是 required)希望大佬们能帮我修改一下代码

4. 您实际得到的结果?#

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

可以在表单响应的 saving 中整体验证表单并返回报错
文档传送

10个月前 评论
JamesBUG (楼主) 10个月前
working (作者) 10个月前
JamesBUG (楼主) 10个月前
working (作者) 10个月前
讨论数量: 8

给 车辆选择 select 加一个 rule,这个是后端验证,你说的 required 是前端验证,这里不能动态实现

$form->radio('status', '审核')->options([
                1 => '审核通过',
                2 => '驳回'
            ])->required()

            ->when(1, function (Form $form) {
                $form->select('car_id', '车辆选择')->options(function () {
                    $demo = new Car();
                    // 查询所有状态为可用的车辆
                    $availableCars = $demo->model()
                    ->where('status', 0)
                    ->get()
                    ->mapWithKeys(function ($car) {
                        return [$car->id => $car->id . ' - ' . $car->car_num];
                    })->toArray();
                    // 添加一个默认选项
                    return ['' => '请选择车辆'] + $availableCars;
                })->rules('required_if:status,1')
                ->saving(function ($value) {
                    // 在保存表单时,更新选定车辆的状态为1
                    if (!empty($value)) {
                        $dcar = new Car();
                        $car = $dcar->model()
                        ->where('id', $value)
                        ->first();
                        if ($car) {
                            $car->status = 1;
                            $car->save();
                        }
                    }
                    return $value;
                });
            })
10个月前 评论
JamesBUG (楼主) 10个月前
JamesBUG (楼主) 10个月前

可以在表单响应的 saving 中整体验证表单并返回报错
文档传送

10个月前 评论
JamesBUG (楼主) 10个月前
working (作者) 10个月前
JamesBUG (楼主) 10个月前
working (作者) 10个月前