| 元件 | 舊位置 | 新位置 | 說明 |
| Controllers | app/controllers | app/Http/Controllers | |
| Filters → Middleware | app/filters.php | app/Http/Middleware | 類別化、可依賴注入、支援終止式 |
| Form Requests | 無 | app/Http/Requests | 驗證邏輯封裝、授權檢查 |
| Kernel | app/start/global.php | app/Http/Kernel.php | 中介層註冊、啟動器 |
| Routes | app/routes.php | app/Http/routes.php | |
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)
- 建立新專案
laravel new project
- 將
app/models 移至 app/Models,補上 namespace App\Models
- Controllers 移至
app/Http/Controllers,補命名空間
- Filters 拆解為 Middleware 類別
- 配置檔移至
config/,語系/視圖移至 resources/
- 業務邏輯提煉至
app/Services/
- 路由檢查相對命名空間
- 執行
composer dump-autoload
總結
Laravel 5 透過目錄重組、PSR-4 命名空間、HTTP 層集中化、Middleware 類別化、Services 業務層引入,確立了 **現代 PHP 框架架構標準**。這不僅是目錄移動,更是「關注點分離」、「依賴注入優先」、「單一職責」等軟體工程原則在框架層面的落地。
- 上一篇文章: PHP 列印實心與空心菱形:演算法解析與優化實作
- 下一篇文章: Smarty 與 CSS 大括號衝突解決方案:三種方法完整比較
Copyright ©
程式碼之家 All Rights Reserved