📅  最后修改于: 2023-12-03 15:07:42.769000             🧑  作者: Mango
在 Laravel 中,我们可以使用验证器类来方便地验证表单数据。而当表单中涉及到图像上传时,我们也可以结合验证器类来对上传的图像进行验证。
Laravel 提供了以下验证规则用于验证图像文件:
image
:必须是一个图像;mimes:jpeg,png,gif
:文件类型必须是 JPEG、PNG 或 GIF;max:size
:文件大小不能超过指定的大小(单位为 KB)。在控制器中使用验证器类,验证表单数据的同时也可以验证上传的图像文件。下面是一个基本的示例:
use Illuminate\Http\Request;
class UserController extends Controller
{
/**
* 注册新用户。
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function register(Request $request)
{
$validator = Validator::make($request->all(), [
'name' => 'required|string|min:2|max:32',
'email' => 'required|string|email|unique:users,email|max:64',
'password' => 'required|string|min:6|max:32|confirmed',
'avatar' => 'required|image|mimes:jpeg,png,gif|max:1024',
]);
if ($validator->fails()) {
return redirect('/register')
->withErrors($validator)
->withInput();
}
// 保存用户数据及头像
// ...
return redirect('/login')->with('success', '注册成功,请登录。');
}
}
上面的代码中,我们通过 Validator::make()
方法创建了一个验证器实例,然后设置了验证规则,包括图像验证规则。如果验证失败,则返回到注册页面并提示错误;如果验证成功,则保存用户数据及头像并跳转到登录页面。
在 Laravel 中,我们可以使用 errors
变量来获取并显示表单验证的错误信息。下面是一个基本的 Blade 模板示例:
<form method="POST" action="/register" enctype="multipart/form-data">
@csrf
<div class="form-group">
<label for="name">用户名:</label>
<input type="text" class="form-control @error('name') is-invalid @enderror" id="name" name="name" value="{{ old('name') }}" required autocomplete="name">
@error('name')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<label for="email">邮箱地址:</label>
<input type="email" class="form-control @error('email') is-invalid @enderror" id="email" name="email" value="{{ old('email') }}" required autocomplete="email">
@error('email')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<label for="password">密码:</label>
<input type="password" class="form-control @error('password') is-invalid @enderror" id="password" name="password" required autocomplete="new-password">
@error('password')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<div class="form-group">
<label for="password-confirm">确认密码:</label>
<input type="password" class="form-control" id="password-confirm" name="password_confirmation" required autocomplete="new-password">
</div>
<div class="form-group">
<label for="avatar">头像:</label>
<input type="file" class="form-control-file @error('avatar') is-invalid @enderror" id="avatar" name="avatar" accept="image/*">
@error('avatar')
<span class="invalid-feedback" role="alert">
<strong>{{ $message }}</strong>
</span>
@enderror
</div>
<button type="submit" class="btn btn-primary">注册</button>
</form>
在上面的代码中,我们使用 @error
Blade 指令来显示表单验证的错误信息。
使用 Laravel 验证器类验证表单数据和上传的图像文件非常方便,可以避免编写繁琐的验证代码,提高开发效率。同时,在 Blade 模板中显示错误信息也十分简单,让用户体验更加友好。