課程簡介
MVC(Model-View-Controller)是一種常見的軟體設計模式,將應用程式的邏輯結構分為三個部分:模型(Model)、視圖(View)與控制器(Controller)。路由則是應用程式的入口,負責接收請求並將其導向正確的控制器與方法。本課程將詳細介紹路由與 MVC 的概念及其在 PHP 中的應用。
路由的基本概念
路由的功能
路由的作用是將 URL 請求映射到特定的控制器方法。例如:
- 請求:
http://example.com/users/1
- 路由:將其對應到
UserController
的 show
方法,並傳遞參數 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:建立產品管理功能
- 建立路由處理產品列表頁面(
/products
)與詳細頁面(/products/{id}
)。
練習 2:用戶註冊與資料顯示
- 使用表單提交用戶資料,透過模型儲存至資料庫,並在視圖中顯示。
教學重點
- 掌握路由的基本用法與控制器的結合。
- 理解 MVC 模式的分工與運作方式。
- 實際操作一個完整的 MVC 流程範例,提升實戰能力。