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

Laravel 8预订日历报错:Target class [FrontendController]不存在

Laravel 8 预订日历功能报错:Target class [FrontendController] does not exist

错误详情

点击「预订」按钮后触发以下错误:

Illuminate\Contracts\Container\BindingResolutionException
Target class [FrontendController] does not exist.

请求地址:http://localhost/testowa7/public/makeReservation/26/5

相关代码

Room Blade 视图代码

<form action="{{ route('makeReservation',['room_id'=>$room->id,'city_id'=>$room->object->city->id]) }}" method="POST">
    <div class="form-group">
        <label for="dayin">入住日期</label>
        <input required name="dayin" type="text" class="form-control datepicker" id="dayin" placeholder="">
    </div>
    <div class="form-group">
        <label for="dayout">退房日期</label>
        <input required name="dayout" type="text" class="form-control datepicker" id="dayout" placeholder="">
    </div>
    <button type="submit" class="btn btn-primary">预订</button>
    <p class="text-danger">{{ Session::get('reservationMsg') }}</p>
    {{ csrf_field() }}
</form>

路由代码

Route::post('/makeReservation/{room_id}/{city_id}','FrontendController@makeReservation')->name('makeReservation');

FrontendController 代码

public function makeReservation($room_id, $city_id, Request $request)
{
    $avaiable = $this->fG->checkAvaiableReservations($room_id,$request);

    if(!$avaiable)
    {
        if(!$request->ajax())  // 非APP环境下使用
        {
            $request->session()->flash('reservationMsg',_('无可用房间'));
            return redirect()->route('room',['id'=>$room_id,'#reservation']);
        }

        return response()->json(['reservation'=>false]);  // APP环境下使用

    }
    else
    {
        $reservation = $this->fG->makeReservation($room_id,$city_id,$request);

        if(!$request->ajax())
            return redirect()->route('adminHome');
        else
            return response()->json(['reservation'=>$reservation]);

    }
    
}

FrontendRepository 代码

public function makeReservation($room_id, $city_id, $request)
{
    return Reservation::create([
        'user_id' => $request->user()->id,
        'city_id' => $city_id,
        'room_id' => $room_id,
        'status' => 0,
        'dayin' => $request->input('dayin'),
        'dayout' => $request->input('dayout'),
    ]);
}

FrontendGateway 代码

public function checkAvaiableReservations($room_id,$request)
{
    $reservations = $this->fR->getReservationsByRoomId($room_id);

    $avaiable = true;

    foreach($reservations as $reservation)
    {
        if( $request->input('dayin') >= $reservation->day_in
          && $request->input('dayin') <= $reservation->day_out
        )
        {
            $avaiable =false;break;
        }
        elseif( $request->input('dayout') >= $reservation->day_in
          && $request->input('dayout') <= $reservation->day_out
        )
        {
            $avaiable =false;break;
        }
        if( $request->input('dayin') >= $reservation->day_in
          && $request->input('dayout') <= $reservation->day_out
        )
        {
            $avaiable =false;break;
        }
    }

    return $avaiable;
}

public function makeReservation($room_id, $city_id, $request)
{
    $this->validate($request, [
        'dayin' => "required|string",
        'dayout' => "required|string",
    ]);

    return $this->fR->makeReservation($room_id, $city_id, $request);
}

解决方案

Laravel 8 取消了路由默认的控制器命名空间,直接用'FrontendController@makeReservation'这种字符串写法会找不到类,可通过以下两种方式解决:

  1. 使用完全限定类名
    确认FrontendController的命名空间(通常为App\Http\Controllers),修改路由代码:

    use App\Http\Controllers\FrontendController;
    
    Route::post('/makeReservation/{room_id}/{city_id}', [FrontendController::class, 'makeReservation'])->name('makeReservation');
    
  2. 恢复默认命名空间
    在app/Providers/RouteServiceProvider.php中取消注释protected $namespace = 'App\\Http\\Controllers';,然后在路由文件中用命名空间分组包裹路由:

    // RouteServiceProvider.php中
    protected $namespace = 'App\\Http\\Controllers';
    
    // 对应路由文件中
    Route::group(['namespace' => $this->namespace], function () {
        Route::post('/makeReservation/{room_id}/{city_id}','FrontendController@makeReservation')->name('makeReservation');
        // 其他路由...
    });
    

额外检查:确认FrontendController文件放在app/Http/Controllers目录下,类名与文件名大小写一致(Laravel对类名大小写敏感)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 16:25:53