PHP和Laravel:Laravel表单与验证
Laravel表单基础
1. 创建表单视图
在Laravel中创建表单视图,通常涉及到HTML和Laravel的Blade模板引擎。表单用于收集用户输入,是Web应用中不可或缺的一部分。下面是一个简单的表单创建示例:
<!-- resources/views/forms/create.blade.php -->
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-header">创建新用户</div>
<div class="card-body">
<form action="{
{ route('users.store') }}" method="POST">
@csrf
<div class="form-group">
<label for="name">姓名</label>
<input type="text" class="form-control" id="name" name="name" placeholder="请输入姓名">
</div>
<div class="form-group">
<label for="email">邮箱</label>
<input type="email" class="form-control" id="email" name="email" placeholder="请输入邮箱">
</div>
<div class="form-group">
<label for="password">密码</label>
<input type="password" class="form-control" id="password" name="password" placeholder="请输入密码">
</div>
<button type="submit" class="btn btn-primary">提交</button>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
1.1 解释
- 使用
@extends
指令来继承一个布局文件。 @section('content')
和@endsection
用于定义布局中的内容部分。{ { route('users.store') }}
使用Laravel的路由辅助函数来生成表单提交的URL。@csrf
指令插入一个CSRF令牌,用于防止跨站请求伪造攻击。- 表单字段使用标准的HTML标签,如
<input>
和<label>
。
2. 处理表单提交
处理表单提交通常在控制器中完成,涉及数据验证和业务逻辑的执行。下面是一个处理表单提交的控制器示例:
// app/Http/Controllers/UsersController.php
namespace App\Http\Controllers;
use App\Http\Requests\UserStoreRequest;
use App\Models\User;
use Illuminate\Http\Request;
class UsersController extends Controller
{
public function store(UserStoreRequest $request)
{
$validated = $request->validated();
User::create($validated);
return redirect()->route('users.index')->with('success', '用户创建成功');
}
}
2.1 解释
- 控制器继承自
Controller
类。 store
方法接收一个UserStoreRequest
实例,这是一个表单请求对象。$request->validated()
方法返回经过验证的数据数组。- 使用
User::create($validated)
来创建一个新的用户实例,并保存到数据库。 - 最后,使用
redirect()->route()
重定向到用户列表页面,并附带一个成功消息。
3. 表单请求对象
表单请求对象用于封装表单提交的逻辑,包括数据验证和授权。下面是一个表单请求对象的示例:
// app/Http/Requests/UserStoreRequest.php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class UserStoreRequest extends FormRequest
{
public function authorize()
{
return true;
}
public function rules()
{
return [
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'password' => 'required|string|min:8|confirmed',
];
}
}
3.1 解释
- 表单请求对象继承自
FormRequest
类。 authorize
方法用于确定用户是否有权限执行请求,通常返回true
。rules
方法定义了表单字段的验证规则。required
:字段是必