Laravel 升級指南

從 6.x 升級到 7.x

composer.json 調整

{
    "require": {
        "php": "^7.2",
        "laravel/framework": "^7.0",
        "laravel/tinker": "^2.0",
        "fideloper/proxy": "^4.0",
        "doctrine/dbal": "^2.6",
        "mews/captcha": "^3.2",
        "phpoffice/phpspreadsheet": "^1.19",
        "phpoffice/phpword": "^0.18.2",
        "rap2hpoutre/laravel-log-viewer": "^1.7",
        "spatie/laravel-activitylog": "3.*"
    },
    "require-dev": {
        "facade/ignition": "^2.0",
        "fzaninotto/faker": "^1.9.1",
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^4.1",
        "phpunit/phpunit": "^8.5"
    }
}

錯誤處理 Handler 調整(因應 Symfony 5)

App\Exceptions\Handler

use Throwable;

public function report(Throwable $exception);
public function shouldReport(Throwable $exception);
public function render($request, Throwable $exception);
public function renderForConsole($output, Throwable $exception);

session 設定檔調整

config/session.php

'secure' => env('SESSION_SECURE_COOKIE', null),

若部署於 HTTPS 環境建議改為:

'secure' => env('SESSION_SECURE_COOKIE', true),

套件升級

執行更新:

composer update

從 7.x 升級到 8.x

composer.json 調整

{
    "require": {
        "php": "^7.3",
        "laravel/framework": "^8.0",
        "laravel/tinker": "^2.0",
        "fideloper/proxy": "^4.0",
        "doctrine/dbal": "^2.6",
        "mews/captcha": "^3.2",
        "phpoffice/phpspreadsheet": "^1.19",
        "phpoffice/phpword": "^0.18.2",
        "rap2hpoutre/laravel-log-viewer": "^1.7",
        "spatie/laravel-activitylog": "3.*"
    },
    "require-dev": {
        "guzzlehttp/guzzle": "^7.0.1",
        "laravel/ui": "^3.0",
        "facade/ignition": "^2.3.6",
        "fzaninotto/faker": "^1.9.1", // Laravel 8 預設已改用 fakerphp/faker,可考慮更新
        "mockery/mockery": "^1.0",
        "nunomaduro/collision": "^5.0",
        "phpunit/phpunit": "^9.0"
    }
}

🔧 Laravel 8 預設使用 FakerPHP 替代已停止維護的 fzaninotto/faker,建議改為:

"fakerphp/faker": "^1.9.1"

維護模式變更

Laravel 8 引入新的維護模式檢查檔案:

修改 public/index.php

define('LARAVEL_START', microtime(true));

if (file_exists($maintenance = __DIR__.'/../storage/framework/maintenance.php')) {
    require $maintenance;
}

分頁樣式調整

Laravel 8 將預設分頁樣式從 Bootstrap 改為 Tailwind CSS,若需維持 Bootstrap 樣式,請於 App\Providers\AppServiceProvider 中加上:

use Illuminate\Pagination\Paginator;

public function boot()
{
    Paginator::useBootstrap();
}

升級後驗證項目清單

  • 執行 composer update 確保所有依賴項符合版本
  • 測試例項與自動化測試是否正常通過
  • 檢查 Handler.php 是否已改用 Throwable
  • 調整分頁樣式(Bootstrap 用戶需加入 Paginator::useBootstrap()
  • 若使用 Laravel UI,需安裝 laravel/ui 並執行對應指令(如 php artisan ui bootstrap
  • 確認是否需將 fzaninotto/faker 更換為 fakerphp/faker

# 快速清理快取
php artisan config:clear
php artisan route:clear
php artisan view:clear
# 快速重建依賴
composer dump-autoload