美文网首页Laravel开发实践程序员Laravel
Laravel从入门到上线运营-09请求篇

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

作者: 3275508ab630 | 来源:发表于2019-10-12 15:17 被阅读0次

    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' => '手机号'
        ...
    ]
    

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

    相关文章

      网友评论

        本文标题:Laravel从入门到上线运营-09请求篇

        本文链接:https://www.haomeiwen.com/subject/btiqmctx.html