首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Laravel 5 核心變更深度解析:目錄結構、命名空間、HTTP 層、服務層與路由

     編輯:PHP 綜合知識

目錄結構大變革

Laravel 4.2 結構

app/
├── commands/
├── config/
├── controllers/
├── database/
├── lang/
├── models/
├── start/
├── storage/
├── tests/
└── views/
bootstrap/
public/

Laravel 5.0 結構

app/
├── Commands/          # 命令總線 (Command Bus)
├── Console/           # Artisan 命令
├── Events/            # 事件類別
├── Handlers/
│   ├── Commands/      # 命令處理器
│   └── Events/        # 事件處理器
├── Http/              # HTTP 層核心
│   ├── Controllers/
│   ├── Middleware/    # 中介層 (取代 Filters)
│   ├── Requests/      # 表單請求驗證
│   ├── Kernel.php     # HTTP 核心
│   └── routes.php     # 路由定義
├── Providers/         # 服務提供者
└── Services/          # 業務邏輯服務層 (新增!)
bootstrap/
config/                # 移至根目錄
database/              # 移至根目錄
├── migrations/
└── seeds/
public/
resources/             # 新增:前端資源
├── lang/              # 語系檔 (從 app/lang 移動)
└── views/             # 視圖 (從 app/views 移動)
storage/
├── cache/
├── logs/
├── meta/
├── sessions/
├── views/
└── work/
tests/

關鍵變更解析

1. App 根命名空間 (PSR-4)

  • app/ 目錄下所有類別預設命名空間為 App
  • composer.json 自動配置 "psr-4": { "App\\": "app/" }
  • 原 app/models 移除,模型類別建議置於 app/Models/ (需自建) 或 app/ 直屬

2. HTTP 層集中化

所有 HTTP 相關元件集中於 app/Http/:

3. Middleware 取代 Filters

<?php
// app/Http/Middleware/Authenticate.php
namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Auth\Guard;

class Authenticate
{
    protected $auth;

    public function __construct(Guard $auth)
    {
        $this->auth = $auth;
    }

    public function handle($request, Closure $next)
    {
        if ($this->auth->guest()) {
            if ($request->ajax()) {
                return response('Unauthorized.', 401);
            }
            return redirect()->guest('auth/login');
        }
        return $next($request);
    }
}

註冊於 Kernel.php:

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
];

4. Services 業務邏輯層 (重大架構改進)

Laravel 5 正式引入 app/Services/ 概念,鼓勵將業務邏輯從 Controller 移出:

<?php
// App\Services\Registrar.php (官方範例)
namespace App\Services;

use App\Models\User;
use Illuminate\Contracts\Auth\Registrar as RegistrarContract;
use Illuminate\Support\Facades\Validator;

class Registrar implements RegistrarContract
{
    public function validator(array $data) { ... }
    public function create(array $data) { ... }
}

Controller 變薄:

<?php
// App\Http\Controllers\Auth\AuthController.php
public function __construct(Guard $auth, Registrar $registrar)
{
    $this->auth = $auth;
    $this->registrar = $registrar;
}

public function postRegister(Request $request)
{
    $validator = $this->registrar->validator($request->all());
    if ($validator->fails()) { ... }
    $this->auth->login($this->registrar->create($request->all()));
    return redirect($this->redirectPath());
}

優勢:單一職責、可測試、可複用、Controller 專注 HTTP 流程控制。

5. 路由命名空間相對化

Route::controllers([
    'auth' => 'Auth\AuthController',      // 相對於 App\Http\Controllers
    'password' => 'Auth\PasswordController',
]);

實際類別:App\Http\Controllers\Auth\AuthController

6. 路由快取

php artisan route:cache   # 生產環境部署必跑
php artisan route:clear   # 清除快取

大幅提升路由註冊效能 (特別是路由數量 > 100 時)。

7. Models 目錄移除

非強制性元件,開發者自行決定放置位置:

  • app/Models/ (推薦,需自建)
  • app/ 直屬
  • app/Entities/ (DDD 風格)

遷移指南 (4.2 → 5.0)

  1. 建立新專案 laravel new project
  2. 將 app/models 移至 app/Models,補上 namespace App\Models
  3. Controllers 移至 app/Http/Controllers,補命名空間
  4. Filters 拆解為 Middleware 類別
  5. 配置檔移至 config/,語系/視圖移至 resources/
  6. 業務邏輯提煉至 app/Services/
  7. 路由檢查相對命名空間
  8. 執行 composer dump-autoload

總結

Laravel 5 透過目錄重組、PSR-4 命名空間、HTTP 層集中化、Middleware 類別化、Services 業務層引入,確立了 **現代 PHP 框架架構標準**。這不僅是目錄移動,更是「關注點分離」、「依賴注入優先」、「單一職責」等軟體工程原則在框架層面的落地。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
元件舊位置新位置說明
Controllersapp/controllersapp/Http/Controllers
Filters → Middlewareapp/filters.phpapp/Http/Middleware類別化、可依賴注入、支援終止式
Form Requests無app/Http/Requests驗證邏輯封裝、授權檢查
Kernelapp/start/global.phpapp/Http/Kernel.php中介層註冊、啟動器
Routesapp/routes.phpapp/Http/routes.php