Laravel学习笔记基础系列--(十七)Laravel 表单数据验证

作者: 温新

分类: 【Laravel】

阅读: 2096

时间: 2021-07-18 14:20:17

作者:温新

时间:2021-06-27

在之前的演示中并没有对表单数据进行后端验证,永远不要相信用户的提交的数据。Laravel中提供了很多方法便于我们对数据验证。

本案例基于DemoController中的demo/test表单页面进行演示。下面来改造表单。

// demo/test.blade.php

@extends('layouts.layout')
@section('title', '添加用户')
@section('header')
    <h3>添加用户</h3>
@endsection

@section('content')
    <form action="/demo/store" method="POST">
        @csrf
        用户名:<input type="text" name="username">
        密码:<input type="password" name="password">
        <input type="submit" name="提交">
    </form>
@endsection

视图文件中添加错误信息输出

// demo/test.blade.php
@section('content')
@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif
@endsection

方式一:控制器验证

方法:validate()

public function store(Request $request)
{
    $validate = $request->validate([
        'username'  =>  'required',
        'password'  =>  'required|min:6|max:18',
    ],[
        'username.required' =>  '用户名必须填写',
        'password.required' =>  '密码必须填写',
        'password.min'      =>  '密码最低6位',
        'password.max'      =>  '密码长度不能超过18位'
    ]);
}

validate第一个参数是验证规则,第二个参数是自定义验证规则。默认是英文提示,第二个参数可以自定义为中文提示。

方式二:手动创建验证器验证

通过 Illuminate\Support\Facades\Validator 中的make()方法验证

// DemoController中store方法
use Illuminate\Support\Facades\Validator;

$data = $request->all();
// 错误提示信息
$messages = [
    'username.required' =>  '用户名必须填写',
    'password.required' =>  '密码必须填写',
    'password.min'      =>  '密码最低6位',
    'password.max'      =>  '密码长度不能超过18位',
];
$validator = Validator::make($data, [
    'username'  =>  'required',
    'password'  =>  'required|min:6|max:18',
], $messages);
// 验证未通过重定向到指定界面,并提示错误信息
if ($validator->fails()) {
    return redirect('/demo/test')->withErrors($validator)->withInput();
}

dd($request->all());

方式三:表单请求验证(推荐)

第一步:创建验证控制器

php artisan make:request StorePostRequest

该命令会在对应的目录与文件,位置在app/Http/Requests/StorePostRequest.php,文件内容如下

<?php
namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StorePostRequest extends FormRequest
{
    public function authorize()
    {
        return false;
    }
    public function rules()
    {
        return [];
    }
}

第二步:修改StorePostRequest.php文件

public function authorize()
{
    return true;
}

第三步:在该文件中编写验证规则与错误信息

// 验证规则
public function rules()
{
    return [
        'username'  =>  'required',
        'password'  =>  'required|min:6|max:18',
    ];
}

// 添加messages()方法自定义错误信息
public function messages()
{
    return [
        'username.required' =>  '用户名必须填写',
        'password.required' =>  '密码必须填写',
        'password.min'      =>  '密码最低6位',
        'password.max'      =>  '密码长度不能超过18位',
    ];
}

第四步:控制器使用

// DemoController.php store方法

use App\Http\Requests\StorePostRequest;

public function store(StorePostRequest $request)
{
    dd($request->all());
}

基础操作到这里告一段落了,接下来是数据库相关的操作。

我是温新

每天进步一点点,就一点点

请登录后再评论