Laravel - 表單:初學者指南
你好,有抱負的開發者們!作為一位有多年經驗的計算機科學老師,我非常高興能夠引導你們進入 Laravel 表單的精彩世界。如果你是編程新手,別擔心——我們會從基礎開始,逐步學習。在本教程結束時,你將能夠像專業人士一樣創建表單!
Laravel 表單是什麼?
在我們深入代碼之前,讓我們先了解 Laravel 表單是什麼。想像你在網上填寫一份工作申請——那就是表單!在網頁開發中,表單是我們從用戶那裡收集信息的工具。我們親愛的 PHP 框架 Laravel,讓創建和處理這些表單變得非常簡單。
為什麼使用 Laravel 來創建表單?
你可能會想,"為什麼要用 Laravel?" 讓我給你講一個小故事。當我還是一個年輕的開發者時(是的,那時還有恐龍在地球上漫步),創建表單是一個冗長的過程。但 Laravel 像超級英雄一樣出現,用它的強大工具和安全特性,讓我們的生活變得更加輕鬆。
開始
首先,確保你的系統上已經安裝了 Laravel。如果你還沒有安裝,別擔心!只需按照 Laravel 官方安裝指南操作,你很快就能夠運行起來。
示例 1:創建一個簡單的聯繫表單
我們從一個簡單的聯繫表單開始。我們將創建一個表單,要求填寫姓名、電子郵件和消息。
步驟 1:創建路由
打開 routes
文件夾中的 web.php
檔案,並添加以下這行代碼:
Route::get('/contact', 'ContactController@showForm');
這告訴 Laravel,當有人訪問 '/contact' URL 時,顯示我們的聯繫表單。
步驟 2:創建控制器
在終端中運行以下命令:
php artisan make:controller ContactController
現在,打開新創建的 ContactController.php
檔案,並添加以下方法:
public function showForm()
{
return view('contact');
}
這個方法將返回我們的聯繫表單視圖。
步驟 3:創建視圖
在 resources/views
文件夾中創建一個名為 contact.blade.php
的新文件,並添加以下代碼:
<form action="/submit-contact" method="POST">
@csrf
<div>
<label for="name">姓名:</label>
<input type="text" id="name" name="name" required>
</div>
<div>
<label for="email">電子郵件:</label>
<input type="email" id="email" name="email" required>
</div>
<div>
<label for="message">消息:</label>
<textarea id="message" name="message" required></textarea>
</div>
<button type="submit">發送</button>
</form>
讓我們分解一下:
-
@csrf
是一個 Laravel 指令,它添加了一個隱藏的令牌以防止跨站請求偽造攻擊。把它看作是表單和 Laravel 之間的秘密握手。 - 我們創建了姓名、電子郵件和消息的輸入字段。
-
required
屬性確保用戶在提交之前填寫所有字段。
步驟 4:處理表單提交
在 web.php
中添加一個新路由:
Route::post('/submit-contact', 'ContactController@submitForm');
然後,在 ContactController
中添加以下方法:
public function submitForm(Request $request)
{
$validatedData = $request->validate([
'name' => 'required|max:255',
'email' => 'required|email',
'message' => 'required',
]);
// 處理表單數據(例如,保存到數據庫,發送電子郵件)
return redirect('/contact')->with('success', '感謝您的消息!');
}
這個方法驗證表單數據,並重定向回到聯繫頁面,顯示一條成功消息。
示例 2:創建一個註冊表單
現在我們已經熱身了,讓我們來創建一個更複雜的註冊表單。
步驟 1:創建路由
在 web.php
中添加以下內容:
Route::get('/register', 'RegisterController@showForm');
Route::post('/register', 'RegisterController@register');
步驟 2:創建控制器
運行以下命令:
php artisan make:controller RegisterController
在 RegisterController
中添加以下方法:
public function showForm()
{
return view('register');
}
public function register(Request $request)
{
$validatedData = $request->validate([
'name' => 'required|max:255',
'email' => 'required|email|unique:users',
'password' => 'required|min:8|confirmed',
'date_of_birth' => 'required|date',
'gender' => 'required|in:male,female,other',
]);
// 在這裡創建用戶邏輯
return redirect('/register')->with('success', '註冊成功!');
}
步驟 3:創建視圖
在你的視圖文件夾中創建一個名為 register.blade.php
的新文件:
<form action="/register" method="POST">
@csrf
<div>
<label for="name">姓名:</label>
<input type="text" id="name" name="name" required>
</div>
<div>
<label for="email">電子郵件:</label>
<input type="email" id="email" name="email" required>
</div>
<div>
<label for="password">密碼:</label>
<input type="password" id="password" name="password" required>
</div>
<div>
<label for="password_confirmation">確認密碼:</label>
<input type="password" id="password_confirmation" name="password_confirmation" required>
</div>
<div>
<label for="date_of_birth">出生日期:</label>
<input type="date" id="date_of_birth" name="date_of_birth" required>
</div>
<div>
<label>性別:</label>
<input type="radio" id="male" name="gender" value="male" required>
<label for="male">男性</label>
<input type="radio" id="female" name="gender" value="female">
<label for="female">女性</label>
<input type="radio" id="other" name="gender" value="other">
<label for="other">其他</label>
</div>
<button type="submit">註冊</button>
</form>
這個表單包含了各種輸入類型:文本、電子郵件、密碼、日期和單選按鈕。
表單驗證方法
這裡是一個常見的 Laravel 驗證方法表格:
方法 | 描述 |
---|---|
required | 欄位不能為空 |
必須是有效的電子郵件地址 | |
max:value | 最大長度 |
min:value | 最小長度 |
unique:table | 必須在指定的數據庫表中是唯一的 |
confirmed | 必須有一個匹配的字段(例如,password_confirmation) |
date | 必須是有效的日期 |
in:foo,bar,... | 必須是列出的值之一 |
結論
恭喜你!你剛剛創建了兩個 Laravel 表單並學會了如何處理它們。記住,熟練使人完美,所以請繼續嘗試不同的表單類型和驗證規則。
在我們結束時,讓我分享一個小故事。我曾經有一個學生,他非常害怕表單——他認為它們是複雜而神秘的東西。但經過幾節課後,他開始為樂趣而創建表單!這就是 Laravel 的美妙之處——它將複雜的事物變得愉快。
繼續編碼,保持好奇心,並不怕提問題。愉快的表單創建!
Credits: Image by storyset