📜  在 laravel 验证器中验证图像 - PHP (1)

📅  最后修改于: 2023-12-03 15:07:42.769000             🧑  作者: Mango

在 Laravel 验证器中验证图像

在 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() 方法创建了一个验证器实例,然后设置了验证规则,包括图像验证规则。如果验证失败,则返回到注册页面并提示错误;如果验证成功,则保存用户数据及头像并跳转到登录页面。

在 Blade 模板中显示错误信息

在 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 模板中显示错误信息也十分简单,让用户体验更加友好。