再讲一下上次登录注册中的一些问题。
虽然我们在 input
中指定了 type
为 email
,required
必填。
<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' => '手机号'
...
]
最好把全部验证规则过一遍,试着把登录验证做一做,其他部分同学自行学习。
网友评论