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

Laravel 9更新操作时出现404页面未找到错误求助

问题描述

我已尝试匹配路由与表单action,自认为配置正确,但提交表单时仍持续出现404页面未找到错误,可能遗漏了某些配置但无法定位。项目工期紧张,急需解决。提交表单后跳转地址异常,相关代码如下:


index.blade.php 代码

<tbody>
@foreach($payments as $payment)
    <tr>
        <td>{{ $payment->order->first_last_name }}</td>
        <td>{{ $payment->order->business_name }}</td>
        <td>{{ $payment->order->business_type }}</td>
        <td>{{ $payment->order->phone_number }}</td>
        <td>{{ $payment->order->postal_code }}</td>
        <td>{{ $payment->order->email }}</td>
        <td>{{ $payment->order->address }}</td>
            <button type="button" class="btn btn-success btn-sm" data-action="{{ route('payments.send', $payment->id) }}" data-bs-toggle="modal" data-bs-target="#send" data-id="{{ $payment->id }}">Send</button>
        </td>
        <td>
            @php $status = $payment->status @endphp
            <span class="{{ $status['bs_class'] }}">
                    {{ $status['label'] }}
                </span>
        </td>
        <td>{{ $payment->accounting_code   }}</td>
    </tr>
    @include('Admin.layouts.modal')
@endforeach
</tbody>

JS 代码

<script>
    $('#send').on('show.bs.modal', function (event) {
        var button = $(event.relatedTarget);
        var action = button.data('action');
        var orderId = button.data('id');
        var modal = $(this);
        modal.find('form').attr('action', action);
        document.getElementById("orderId").value = orderId;
    });
</script>
<div class="modal fade" id="send" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="send" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content"> 
            <form action="{{ route('payments.accounting', $payment->id) }}" method="post">
                @csrf
                @method('PUT')
                <input type="hidden" id="orderId" value="">
                <div class="modal-header">
                    <h5 class="modal-title" id="sendTitle">send</h5>
                    <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="close"></button>
                </div>
                <div class="modal-body">
                    <div class="mb-3">
                        <label for="accounting_code" class="form-label">کد accounting_code</label>
                        <input type="text" class="form-control" id="accounting_code" name="accounting_code">
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="submit" class="btn btn-success">save</button>
                </div>
            </form>
        </div>
    </div>
</div>

web.php 路由代码

Route::put('/payments/accounting/{payment}', [App\Http\Controllers\Admin\PaymentController::class,'accounting'])->name('payments.accounting');

PaymentController.php 代码

public function accounting(Payment $payment, Request $request)
{
    dd('hello');
    $data = [
        'accounting_code' => $request->post('accounting_code')
    ];
    $payment->update($data);
    return back();
}

问题排查与解决方案
  • 路由名称不匹配:按钮的data-action调用了route('payments.send', $payment->id),但路由中仅定义了payments.accounting,不存在payments.send路由,导致JS设置的表单action为无效地址,触发404。需将按钮中的route('payments.send', $payment->id)改为route('payments.accounting', $payment->id)。
  • 重复渲染Modal:在@foreach循环内@include('Admin.layouts.modal')会为每个payment生成相同id的模态框,DOM中id重复会导致JS事件绑定混乱、表单action设置异常。需将@include('Admin.layouts.modal')移至循环外部,仅渲染一次模态框。
  • Modal初始Action错误:若将Modal移至循环外,原modal中{{ route('payments.accounting', $payment->id) }}会因无$payment变量报错,需将form的action初始值设为空,完全依赖JS设置正确地址。

修改后的关键代码片段

index.blade.php(部分)

<tbody>
@foreach($payments as $payment)
    <tr>
        <!-- 其他td内容不变 -->
        <td>
            <button type="button" class="btn btn-success btn-sm" data-action="{{ route('payments.accounting', $payment->id) }}" data-bs-toggle="modal" data-bs-target="#send" data-id="{{ $payment->id }}">Send</button>
        </td>
        <!-- 其他td内容不变 -->
    </tr>
@endforeach
</tbody>
<!-- 将Modal移至循环外 -->
@include('Admin.layouts.modal')

modal.blade.php(form部分)

<form action="" method="post">
    @csrf
    @method('PUT')
    <!-- 其他内容不变 -->
</form>

内容的提问来源于stack exchange,提问作者Mahmoud Khosravi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:20:33