Laravel 基礎結構 MVC 架構 (Models-Views-Controllers)
模型 Models
app/Models
目錄中。視圖 Views
resources/views
目錄中。控制器 Controllers
app/Http/Controllers
目錄中。app/
├── Console/ # Artisan 命令
├── Exceptions/ # 自定義例外處理
├── Http/
│ ├── Controllers/ # 控制器
│ ├── Middleware/ # 中介層
│ └── Requests/ # 請求驗證
├── Models/ # Eloquent 模型
bootstrap/
├── app.php # 框架啟動腳本
config/ # 配置文件
database/
├── factories/ # 模型工廠
├── migrations/ # 數據庫遷移
└── seeders/ # 數據填充
public/ # 公共資源(如 CSS、JavaScript)
resources/
├── lang/ # 語言文件
├── views/ # Blade 模板
└── sass/ # SCSS 文件
routes/ # 路由定義
storage/ # 日誌和上傳文件
tests/ # 測試文件
vendor/ # Composer 依賴包
路由和控制器
使用 RESTful 路由來組織應用的 URL 結構。
當然也可以用資源控制器的方法,指令 php artisan make:controller {TodoController} --resource
Laravel 資源路由就會使用一行程式碼將典型的建立、讀取、更新和刪除 CRUD 路由分配給控制器。
數據庫操作
通過使用 Eloquent ORM,進行資料庫的 CRUD 操作,當然個人覺得最複雜的地方也是這段,因為還有 model 的關聯 relationships!
視圖與模板
參考文章:30天 JavaScript 提升計畫:從零到精通結合2024年的創新功能 - 第 26 天:安全最佳實踐
回顧:第 13 天:前端 Vue3 搭配後端 Laravel 9.x
使用 Blade 模板引擎渲染視圖,理解視圖的組織結構和數據傳遞,這裡是我一開始學後端的時候認識路由的地方,一路上覺得這裡的重點是用 @csrf
來保護表單。
當然,依照現在的專案主要是前後端分離,所以可以用前端框架或是原生寫法取代傳統的 Blade 視圖來實現前後端分離。
🐘 補充說明:
@csrf
用於生成一個 CSRF 保護令牌,防止跨站請求偽造。
表單和驗證
創建表單並進行表單驗證,或是使用 Laravel 的 獨立驗證 Validator::make()
驗證功能來處理用戶輸入。
當使用者成功創建、更新或刪除待辦事項後,也可以使用 redirect()->route('todos.index')->with('success', '...');
來向用戶顯示成功消息。
中介層和安全性
中介層用於過濾請求進入應用程序。例如,可以用於身份驗證或日誌記錄。
中介層放在 app/Http/Middleware
。
API 開發
建立 RESTful API。
使用 JSON 輸出數據,並理解 API 的認證機制。
測試和除錯
學會編寫單元測試和功能測試。
使用 Laravel 的日誌系統進行除錯。
之前的任務管理系統也是標準的 CRUD 範例,今天寫一個每次學新語言或框架都會練習的 To_do List!
創建數據表和模型
運用指令 php artisan make:model Todo -m
public function up()
{
Schema::create('todos', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->boolean('completed')->default(false);
$table->timestamps();
});
}
編輯控制器
namespace App\Http\Controllers;
use App\Models\Todo;
use Illuminate\Http\Request;
class TodoController extends Controller
{
public function index()
{
return Todo::all();
}
public function store(Request $request)
{
$todo = Todo::create($request->all());
return response()->json($todo, 201);
}
public function update(Request $request, Todo $todo)
{
$todo->update($request->all());
return response()->json($todo, 200);
}
public function destroy(Todo $todo)
{
$todo->delete();
return response()->json(null, 204);
}
}
編輯 routes/api.php
設置 API 路由
use App\Http\Controllers\TodoController;
Route::resource('todos', TodoController::class);
官方文檔:laravel
中文文件:Laravel 5.8 入門講義、laravel
學習資源:PHP 教程、SQL 教程