如何在 Laravel 8 中动态禁用已预订的预约时段单选按钮

来源:编程学习作者:深圳GEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《如何在 Laravel 8 中动态禁用已预订的预约时段单选按钮》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在 Laravel 8 中动态禁用已预订的预约时段单选按钮》有用,将其分享出去将是对创作者最好的鼓励。

在 Laravel 8 开发的预约系统中,我们经常会遇到这样的需求:页面上列出多个可预约的时段,每个时段用一个单选按钮表示,而已被预订的时段应该动态禁用,防止用户重复提交。实现的核心思路是,后端查询已预订时段并传递给视图,前端根据数据禁用对应单选按钮。

如何在 Laravel 8 中动态禁用已预订的预约时段单选按钮

一、控制器中查询已预订时段

假设我们有一个 appointments 表,里面记录了日期和时段标识(如 morning、afternoon)。在控制器里,我们可以先取出某天已被占用的时段。

<?php

namespace AppHttpControllers;

use IlluminateHttpRequest;
use IlluminateSupportFacadesDB;

class AppointmentController extends Controller
{
    public function create(Request $request)
    {
        $date = $request->input('date', date('Y-m-d'));

        // 查询该日期下已预订的时段
        $booked = DB::table('appointments')
            ->where('date', $date)
            ->pluck('slot')
            ->toArray();

        // 所有可选时段
        $slots = [
            'morning' => '上午 09:00-12:00',
            'afternoon' => '下午 14:00-17:00',
            'evening' => '晚上 19:00-21:00'
        ];

        return view('appointments.create', compact('slots', 'booked', 'date'));
    }
}

二、Blade 模板中动态渲染单选按钮

在视图文件里,我们遍历时段数组,并判断当前时段是否出现在已预订数组中,如果是则添加 disabled 属性。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>预约时段</title>
</head>
<body>
    <h3>选择预约时段({{ $date }})</h3>
    <form method="POST" action="/appointments">
        @csrf
        @foreach ($slots as $key => $label)
            <label>
                <input type="radio" name="slot" value="{{ $key }}"
                    @if(in_array($key, $booked)) disabled @endif>
                {{ $label }}
                @if(in_array($key, $booked))
                    <em>(已预订)</em>
                @endif
            </label>
            <br>
        @endforeach
        <button type="submit">提交预约</button>
    </form>
</body>
</html>

三、用 JavaScript 增强交互(可选)

如果时段是异步加载的,也可以用 JS 动态禁用。下面示例展示拿到 booked 数组后如何操作。

// 假设从接口拿到已预订时段
let booked = ['afternoon'];

document.querySelectorAll('input[name="slot"]').forEach(function (el) {
    if (booked.indexOf(el.value) !== -1) {
        el.disabled = true;
        let em = document.createElement('em');
        em.textContent = '(已预订)';
        el.parentNode.appendChild(em);
    }
});

四、小结

通过以上方式,我们就能在 Laravel 8 中轻松实现动态禁用已预订预约时段的单选按钮。核心就是后端提供准确数据,前端或模板做条件判断,既简单又可靠。

Laravel_8预约系统动态禁用修改时间:2026-07-29 10:33:24

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。