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

Laravel跨控制器处理表单存储及获取房屋ID问题咨询

提交无响应的直接原因

两个视图配置错误导致点击按钮无反应:

  • 表单action属性为空,没有指定提交的目标地址
  • 提交按钮type属性设置为button,该类型按钮默认不会触发表单提交逻辑
跨控制器处理请求的可行性说明

Laravel完全支持不同控制器分别负责视图渲染、表单存储的实现方式,这是符合框架设计规范的常规分层写法,你当前拆分House控制器和Booking控制器的思路没有问题,不需要调整整体架构。

获取对应房屋ID的实现步骤

你已经在POST路由中定义了{house}路径参数,按以下步骤调整即可正常拿到ID并完成提交:

  • 第一步:为预订存储路由添加名称(推荐,后续维护更方便)
    修改routes/web.php中的对应路由:
    Route::post('house/{house}', [\App\Http\Controllers\BookingController::class, 'store'])->name('booking.store');
    
  • 第二步:修复视图中的表单配置
    将房屋详情视图里的表单部分替换为以下代码,补全提交地址,同时修正按钮类型:
    <form method="POST" action="{{ route('booking.store', $house) }}">
        @csrf
        <input type="date" name="begin" required>
        <input type="date" name="end" required>
        <div class="col-md-12 bg-light mt-3">
            <button type="submit" class="btn btn-warning ml-2">提交申请</button>
        </div>
    </form>
    
    如果不想给路由命名,也可以直接写路径格式:action="/house/{{ $house->id }}"
  • 第三步:调整Booking控制器的store方法,接收路由参数
    你之前写的$request->id无法拿到房屋ID,因为表单中没有传递名为id的字段,正确做法是通过路由模型绑定直接注入对应房屋实例:
    <?php
    namespace App\Http\Controllers;
    
    use App\Models\Booking;
    use App\Models\House;
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Auth;
    
    class BookingController extends Controller
    {
        public function store(Request $request, House $house)
        {
            // 建议增加参数校验,避免非法数据入库
            $validated = $request->validate([
                'begin' => 'required|date',
                'end' => 'required|date|after:begin',
            ]);
    
            Booking::create([
                'user_id' => Auth::id(),
                'house_id' => $house->id, // 直接从路由绑定的房屋实例取ID
                'begin' => $validated['begin'],
                'end' => $validated['end'],
                'status' => 0
            ]);
            
            return redirect('/');
        }
    
        // 其余方法保持不变
    }
    
额外提醒

记得给Booking模型设置$fillable属性,允许批量赋值user_id、house_id、begin、end、status字段,否则会出现MassAssignmentException报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:18:20