You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用$dispatch将ID传入模态框并保存至数据库

解决将Application ID传入模态框并保存到数据库的问题

1. 修改按钮,传递Application ID到模态框

在applications.blade的按钮中,更新x-on:click事件,在open-modal调度中携带目标应用的ID参数:

<a href="#" class="block px-5 py-1 hover:bg-gray-100" 
x-on:click="$dispatch('open-modal', { name: 'bspms-attachments', applicationId: {{ $application->id }} })">Attach
</a>

注:确保$application->id是当前页面对应的数据模型变量

2. 在模态框中接收ID并绑定到表单

首先,在toggle-button的表单内添加隐藏输入框,用于存储传递过来的ID:

<div id="uploadModal1" class="modal">
    <div class="modal-content">
        <span class="close" id="closeModal1">&times;</span>
        <h2>Upload File</h2>
        <form action="{{ route('file.upload') }}" method="POST" enctype="multipart/form-data">
            @csrf
            <!-- 隐藏输入框存储application ID -->
            <input type="hidden" name="application_id" x-bind:value="applicationId">
            <input type="file" name="fileInput1">
            <button type="submit">Upload</button>
        </form>      
    </div>
</div>

然后修改modals.blade中的x-pop-up组件,添加Alpine.js状态来接收并暂存ID:

<x-pop-up name="bspms-attachments" :show="false" focusable class="w-[650px]"
    x-data="{ applicationId: null }"
    x-on:open-modal.window="if ($event.detail.name === 'bspms-attachments') { 
        applicationId = $event.detail.applicationId;
        console.log('Received Application ID:', applicationId); // 控制台调试用
    }"> 
    {{-- Define the width for the modal. The minimum width is 500px --}}
    <x-slot:title>
        Documents/Attachments
    </x-slot:title>
    
    {{-- Content starts here --}}
    <x-toggle-button></x-toggle-button>
</x-pop-up>

这段代码会监听全局的open-modal事件,当触发的模态框名称匹配时,将传递的ID存入组件状态,再通过x-bind:value绑定到表单的隐藏输入框。

3. 控制器中接收ID并写入数据库

更新控制器代码,从请求中获取application_id并完成数据库写入:

use Illuminate\Http\Request;

public function upload(Request $request)
{
    // 此处省略文件上传的逻辑处理,确保$originalFile、$fileInputName、$filePath已正确获取
    
    ApplicationsAttachment::create([
        'application_id' => $request->application_id, // 从表单请求中获取ID
        'file_name' => $fileInputName,
        'file_type' => explode('/', $originalFile->getMimeType())[1],
        'file_path' => $filePath,
        'file_size' => $originalFile->getSize(), // 注意:getMaxFilesize()是服务器允许的最大上传尺寸,应使用getSize()获取文件实际大小
    ]);
    
    // 后续响应逻辑(比如跳转、返回提示)
}

4. 验证调试

点击Attach按钮打开模态框后,打开浏览器控制台(F12),可以看到打印的Received Application ID:及对应数值,确认ID传递正常。提交表单后,检查数据库applications_attachments表的application_id字段,验证是否已正确写入。

内容的提问来源于stack exchange,提问作者Hayato Yorikawa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 22:33:21