Laravel开发实践程序员Laravel

Laravel从入门到上线运营-09请求篇

2019-10-12  本文已影响0人  3275508ab630

Laravel从入门到上线运营-09请求篇

再讲一下上次登录注册中的一些问题。

虽然我们在 input 中指定了 typeemailrequired 必填。

<input type="email" name="email" placeholder="邮箱" required>

但有很多地方是无法指定这些操作的,又或者有些人看到网页源代码后知道你的请求地址直接自己提交。防不胜防,为了数据准确,我们需要对数据进行校验。

之前我们是通过 $request 这个类去获取参数,它是可以用来校验数据的。校验的方式有很多,我们只取一种最好的讲。

命令行创建 RegisterRequest.php,文件在 app/Http/Requests

php artisan make:request RegisterRequest

编写对数据验证的代码

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class RegisterRequest extends FormRequest
{
    public function authorize()
    {
        return true; //改为 true
    }

    public function rules()
    {
        return [
            'email' => 'required|email', //验证规则:必须,电子邮箱格式
            'password' => 'required|min:6' //验证规则:必须,长度最小6位
        ];
    }
}

替换 RegisterController 中的 Request

<?php

namespace App\Http\Controllers;

use App\User;
use App\Http\Requests\RegisterRequest;

class RegisterController extends Controller
{
    public function index()
    {
        return view('register');
    }

    public function register(RegisterRequest $request)
    {
        $user = User::create([
            'name' => '',
            'email' => $request->email,
            'password' => bcrypt($request->password)
        ]);

        auth()->login($user);

        return redirect('/');
    }
}

然后去掉模板文件里的 html 限制代码,测试一下注册

<input type="text" name="email" placeholder="邮箱">
<input type="password" name="password" placeholder="密码">

这时候如果什么都不填,或者填入错误的格式,就发现都是停留在注册页中。这就是因为 RegisterRequest 校验数据不通过,把错误返回来了。错误信息存在 $errors 变量中

<div class="row">
    <div class="col-12">
        @if ($errors->any())
            <div class="alert alert-danger">
                <ul>
                    @foreach ($errors->all() as $error)
                        <li>{{ $error }}</li>
                    @endforeach
                </ul>
            </div>
        @endif
        <form action="{{ url('register') }}" method="post">
            @csrf
            <input type="text" name="email" placeholder="邮箱">
            <input type="password" name="password" placeholder="密码">
            <button type="submit">注册</button>
        </form>
    </div>
</div>

这样就能看到报错信息,但是是英文的,我们把他改成中文,有两种方法。第一种在 Request 文件里改

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class RegisterRequest extends FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'email' => 'required|email', //验证规则:必须,电子邮箱格式
            'password' => 'required|min:6' //验证规则:必须,长度最小6位
        ];
    }

    public function attributes()
    {
        return [
            'email' => '邮箱',
            'password' => '密码'
        ];
    }

    public function messages()
    {
        return [
            'email.required' => ':attribute不能为空',
            'email.email' => ':attribute不正确',
            'password.required' => ':attribute不能为空',
            'password.min' => ':attribute最少:min位',
        ];
    }
}

第二种在 resources/lang/en 修改,根据意思和具体情况翻译成中文就行。其中的 attributes 数组可以全局定义键的中文名

'attributes' => [
    'email' => '邮箱',
    'mobile' => '手机号'
    ...
]

最好把全部验证规则过一遍,试着把登录验证做一做,其他部分同学自行学习。

上一篇 下一篇

猜你喜欢

热点阅读