文章

PHP - 路由與 MVC 概念


課程簡介

MVC(Model-View-Controller)是一種常見的軟體設計模式,將應用程式的邏輯結構分為三個部分:模型(Model)、視圖(View)與控制器(Controller)。路由則是應用程式的入口,負責接收請求並將其導向正確的控制器與方法。本課程將詳細介紹路由與 MVC 的概念及其在 PHP 中的應用。


路由的基本概念

路由的功能

路由的作用是將 URL 請求映射到特定的控制器方法。例如:

  • 請求http://example.com/users/1
  • 路由:將其對應到 UserControllershow 方法,並傳遞參數 1

PHP 框架中的路由

以 Laravel 為例,路由定義在 routes/web.php 文件中:

1
Route::get('/users/{id}', [UserController::class, 'show']);

MVC 的基本概念

1. Model(模型)

  • 負責處理資料:與資料庫互動,執行資料的查詢、儲存與邏輯處理。
  • 位置:通常位於 app/Models/ 中。
  • 範例:在 Laravel 中,一個 User 模型可以表示資料庫中的 users 表。
1
2
3
4
5
6
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $fillable = ['name', 'email'];
}

2. View(視圖)

  • 負責顯示資料:將資料以 HTML 格式呈現給使用者。
  • 位置:通常位於 resources/views/ 中。
  • 範例:在 Laravel 中,使用 Blade 模板引擎定義視圖。
<!-- resources/views/user.blade.php -->
<h1>使用者:{{ $user->name }}</h1>
<p>電子郵件:{{ $user->email }}</p>

3. Controller(控制器)

  • 負責邏輯處理:接收請求,調用模型進行資料處理,然後返回對應的視圖。
  • 位置:通常位於 app/Http/Controllers/ 中。
  • 範例:控制器處理使用者資料並返回視圖。
1
2
3
4
5
6
7
8
9
10
use App\Models\User;

class UserController extends Controller
{
    public function show($id)
    {
        $user = User::find($id);
        return view('user', ['user' => $user]);
    }
}

路由與 MVC 的結合

一個完整的範例

1. 路由定義

1
Route::get('/users/{id}', [UserController::class, 'show']);

2. 控制器邏輯

1
2
3
4
5
6
7
8
9
10
use App\Models\User;

class UserController extends Controller
{
    public function show($id)
    {
        $user = User::find($id);
        return view('user', ['user' => $user]);
    }
}

3. 模型定義

1
2
3
4
5
6
use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    protected $fillable = ['name', 'email'];
}

4. 視圖呈現

<!-- resources/views/user.blade.php -->
<h1>使用者:{{ $user->name }}</h1>
<p>電子郵件:{{ $user->email }}</p>

訪問 http://localhost/users/1,將顯示 ID 為 1 的使用者資訊。


MVC 的優勢

  1. 結構清晰:資料邏輯、業務邏輯與介面顯示分離,提升程式可維護性。
  2. 團隊合作:開發者可以專注於模型、控制器或視圖的開發,分工明確。
  3. 重用性強:模型與視圖的分離讓功能更易於重用。

課程練習

練習 1:建立產品管理功能

  • 建立路由處理產品列表頁面(/products)與詳細頁面(/products/{id})。

練習 2:用戶註冊與資料顯示

  • 使用表單提交用戶資料,透過模型儲存至資料庫,並在視圖中顯示。

教學重點

  • 掌握路由的基本用法與控制器的結合。
  • 理解 MVC 模式的分工與運作方式。
  • 實際操作一個完整的 MVC 流程範例,提升實戰能力。

本文章以 CC BY 4.0 授權