Laravel 11 升級到 12 後出現 Class Route not found 的錯誤解決

@if (Route::has(‘login’)) 在 blade 中, 要使用 @if (Illuminate\Support\Facades\Route::has(‘login’)) 這樣才能解析 Route, 否則會出現 Class Route not found ,那裡出錯?

image 1

在 Laravel 12 中,如果在 Blade 模板中直接使用 Route::has() 出現 “Class Route not found” 錯誤,而必須使用完整的命名空間 Illuminate\Support\Facades\Route::has(),這表明 Laravel 的 Facade 別名沒有正確註冊。

問題原因

Laravel 通常會自動加載 Route Facade 的別名(通過 config/app.php 的 aliases 陣列),但在升級到 Laravel 12 時可能出現:

  1. config/app.php 的 aliases 陣列缺少 Route 別名
  2. Composer 自動加載未正確更新
  3. 緩存未清除導致別名未生效

解決方法

方法 1:檢查 config/app.php 的 aliases

確保 aliases 陣列包含 Route 別名:

'aliases' => [
    // ...
    'Route' => Illuminate\Support\Facades\Route::class,
    // ...
],

如果缺少,請手動添加並執行:

php artisan config:clear

方法 2:更新 Composer 自動加載

有時 Composer 的 autoload 可能未正確更新:

composer dump-autoload

方法 3:清除所有緩存

Laravel 可能緩存了舊的配置:

php artisan cache:clear
php artisan view:clear
php artisan route:clear
php artisan config:clear

方法 4:檢查 bootstrap/cache 目錄

如果 bootstrap/cache 目錄權限有問題,可能導致別名無法載入:

rm -rf bootstrap/cache/*
php artisan optimize

方法 5:手動導入 Facade(臨時解決方案)

如果問題仍未解決,可以在 Blade 文件頂部手動導入:

@php use Illuminate\Support\Facades\Route; @endphp

然後繼續使用:

@if (Route::has('login'))
    ...
@endif

總結

  1. 主要問題Route Facade 別名未正確註冊。
  2. 解決步驟
    • 檢查 config/app.php 的 aliases 是否有 Route
    • 執行 composer dump-autoload 和 php artisan config:clear
    • 如果仍然不行,手動導入 Route Facade 或檢查緩存問題。

這樣應該能解決 Class Route not found 的問題。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


內容索引