Laravel三种方法验证表单数据

作者: 温新

分类: 【Laravel】

阅读: 3744

时间: 2020-06-03 13:21:13

关于数据验证,每一个开发者一定会碰到,这篇文章详细记录了验证的步骤,真正的一看懂就懂,就算不懂,跟着操作也能实现。总结了三种常用的验证方法,但是推荐使用第三方法。优点自己去体会吧~~~

方法一、控制器验证

通过 Illuminate\Http\Request 中的validate()方法验证

public function store(Request $request)
{
    $validate = $request->validate([
        'name'  =>  'required|max:10',
    ],[
        'name.required' => '文件名必须填写',
        'name.max'      => '文件名不能超过10个汉字',
    ]);
}

方法二、手动创建验证器

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

第一步:第一步:控制器编写验证代码
<?php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

class UserController extends Controller
{

    public function store(Request $request)
    {
        // 接收数据
        $data = $request->all();

        // 错误信息
        $messages = [
            'name.required' =>  '文件名必须填写',
            'name.max'      =>  '文件名不能超过10个汉字',
        ];
        // make前三个参数:数据,验证规则,错误信息
        $validator = Validator::make($data , [
            'name'  =>  'required|max:10',
        ] , $messages);
        // 验证未通过重定向到指定界面,并提示错误信息
        if ($validator->fails()) {
            return redirect('post') ->withErrors($validator)->withInput();
        }

        // 验证通过
    }
}
第二步:视图显示错误信息
{{-- app/resources/views/index.post.php --}}
@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

方法三、表单请求验证(推荐)

第一步:创建验证控制器
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 [
        'name'  =>  'required|max:10'
    ];
}
// 错误信息:添加messages()方法自定义错误信息
public function messages()
{
    return [
        'name.required' => '文件名必须填写',
        'name.max'      => '文件名最大不能超过30个字'
    ];
}
第四步:控制器中使用
// app/Http/Controllers/UserController.php

<?php

namespace App\Http\Controllers;
// 引入验证
use App\Http\Requests\StorePost;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class UserController extends Controller
{
    // 通过依赖注入使用验证
    // 这样就可以了~~
    public function store(StorePost $request)
    {
        $data = $request->all();
   }
}
第五步:视图模板显示错误信息
{{-- app/resources/views/index.blade.php --}}
@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

^_^完

我是夕阳何处寻,期待和优秀的你一起同行!

夕阳何处寻

2020年06月03日

请登录后再评论