Laravel - 表单:初学者指南

你好,有抱负的开发者们!作为一名拥有多年教学经验的计算机科学老师,我很高兴能引导你们进入Laravel表单的精彩世界。如果你是编程新手,不用担心——我们将从基础开始,逐步深入。在本教程结束时,你将能够像一个专业人士一样创建表单!

Laravel - Forms

Laravel 表单是什么?

在我们深入代码之前,先来了解一下Laravel表单是什么。想象一下你在网上填写一份工作申请——那就是表单!在网页开发中,表单是我们收集用户信息的方式。Laravel,我们友好的PHP框架,使得创建和处理这些表单变得轻而易举。

为什么使用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 字段不能为空
email 必须是一个有效的电子邮件地址
max:value 最大长度
min:value 最小长度
unique:table 必须在指定的数据库表中唯一
confirmed 必须有一个匹配的字段(例如,password_confirmation)
date 必须是一个有效的日期
in:foo,bar,... 必须是列出的值中的一个

结论

恭喜你!你已经创建了两个Laravel表单并学会了如何处理它们。记住,熟能生巧,所以继续尝试不同的表单类型和验证规则。

在我们结束之前,让我分享一个小故事。我曾经有一个学生,他对表单感到非常害怕——他认为它们是复杂而神秘的。但经过几节课后,他开始为了乐趣而创建表单!这就是Laravel的美妙之处——它把复杂的事情变得愉快。

继续编码,保持好奇心,永远不要害怕提问。快乐构建表单!

Credits: Image by storyset