Laravel表单中动态日期范围处理与多操作提交指南

admin 百科 24

Laravel表单中动态日期范围处理与多操作提交指南

本教程旨在解决laravel应用中,如何在一个表单内有效捕获动态日期范围(如`start_date`和`end_date`),并将其传递给不同的操作(如“搜索”和“打印”)。文章将详细介绍通过优化前端视图层和后端控制器逻辑,利用多提交按钮机制,确保所有表单数据都能正确提交并被控制器识别,从而实现灵活的业务流程。

理解问题与传统方法局限性

在Web开发中,我们经常需要从用户界面获取动态输入,并根据这些输入执行不同的操作。例如,在一个报告页面,用户可能需要输入一个日期范围来“搜索”数据,或者基于相同的日期范围“打印”报告。

原始实现中,用户尝试使用一个HTML

标签来提交日期范围进行“搜索”,而“打印”功能则通过一个独立的 标签实现:

<form action="/laporanstok/viewlaporanstok" method="get">
    <!-- ... 日期输入字段 ... -->
    <p class="container text-center">
        <button type="submit" class="btn btn-success">
            <i class="fas fa-search"></i> Cari
        </button>
        <a href="{{ route('cetak_stok',['start_date'=>"????",'end_date'=>"????"],) }}" target="_blank" class="btn btn-primary">
            <i class="fas fa-print"></i> Print
        </a>
        <a href="/laporanstok" class="btn btn-danger">
            <i class="fas fa-sync-alt"></i> Reset
        </a>
    </p>
</form>

登录后复制

这种方法存在一个核心问题: 标签是一个超链接,其行为是导航到指定的URL。它本身不会提交任何表单数据。如果 标签的 href 属性中没有显式地包含动态的 start_date 和 end_date 参数,那么在点击“Print”时,控制器接收到的日期参数将是空值。手动在Blade模板中构建一个包含JavaScript的动态URL虽然可行,但会增加复杂性,且可能与表单提交的意图相悖。

解决方案:利用多提交按钮优化表单处理

为了解决上述问题,最简洁且符合HTML表单语义的方案是,将“打印”操作也作为一个表单提交动作。这可以通过在同一个

标签内使用多个 type="submit" 按钮来实现。

1. 前端视图层调整

我们需要修改Blade视图文件,将“Print”按钮从 标签改为 button type="submit"。关键在于为每个提交按钮添加一个 name 属性,以便后端控制器能够区分用户点击了哪个按钮。

<form action="/laporanstok/viewlaporanstok" method="get">
    <p class="container align-items-center">
        <p class="row">
            <p class="col-6">
                <p class="form-group">
                    <label class="font-weight-bold">Tanggal Mulai:</label>
                    <input type="date" id="start_date" name="start_date" class="form-control" required>
                </p>
            </p>
            <p class="col-6">
                <p class="form-group">
                    <label class="font-weight-bold">Tanggal Akhir:</label>
                    <input type="date" id="end_date" name="end_date" class="form-control" required>
                </p>
            </p>
            <p class="container text-center">
                <button type="submit" name="search" class="btn btn-success">
                    <i class="fas fa-search"></i> Cari
                </button>
                <button type="submit" name="print" class="btn btn-primary">
                    <i class="fas fa-print"></i> Print
                </button>
                <a href="/laporanstok" class="btn btn-danger">
                    <i class="fas fa-sync-alt"></i> Reset
                </a>
            </p>
        </p>
    </p>
</form>

登录后复制

Laravel表单中动态日期范围处理与多操作提交指南-第2张图片-佛山资讯网

解释:

  • 现在,“Cari”和“Print”都是 type="submit" 的按钮,它们都位于同一个 标签内。
  • 当任何一个 type="submit" 按钮被点击时,整个表单的数据(包括 start_date 和 end_date)都会被提交到表单的 action URL (/laporanstok/viewlaporanstok)。
  • 我们为“Cari”按钮添加了 name="search",为“Print”按钮添加了 name="print"。当表单提交时,被点击的按钮的 name 属性及其值(如果指定)也会作为请求参数发送到服务器。

2. 后端控制器逻辑实现

由于现在所有操作都通过同一个表单提交,我们需要在控制器中判断是哪个按钮触发了提交。Laravel的 Request 对象提供了方便的方法来检查请求参数。

标签: php javascript laravel java html 前端 cad 浏览器 app 后端 ai pdf 路由

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~

趣科技 机圈观察员 茄考网 茄录网 海印网 雷鹃网 鹃朝网 互联网观察员 评测官
趣科技 机圈观察员 茄考网 茄录网 海印网 雷鹃网 鹃朝网 互联网观察员 评测官