表单请求FormRequest

最一开始对表单数据进行验证都是直接在控制器的方法中手工调用validator来进行验证,比如:

public function update(User $user, Request $request)
{
    $this->validate($request, [
        'name' => 'required|max:50',
        'password' => 'nullable|confirmed|min:6',
    ]);
}

虽然很简单直观,但是有个致命缺点,就是需要验证的内容较多的话,会使controller代码量增大,无法做到代码的复用,也不适合进行复杂的逻辑验证。

而laravel中提供的表单请求验证就可以很好的解决这个问题。

工作机制

首先需要利用laravel提供的依赖注入功能,在控制器方法update()中传入所依赖的组件UserRequest,当执行update()方法的时候,就会触发触发表单请求类的自动验证机制。

public function update(UserRequest $request, User $user)
    {
        $user->update($request->all());
        return redirect()->route('users.show', $user->id)->with('success', '个人资料更新成功!');
    }

默认使用表单请求类中的rule()方法进行验证,所以需要我们自定义验证规则。只有当验证通过时,才会执行update()方法中的代码,否则会抛出异常,并附带着验证失败的信息重定向到上一个页面。

...
class UserRequest extends FormRequest
{
    ...

    public function rules()
    {
        return [
            'name' => 'required|between:3,25|regex:/^[A-Za-z0-9\-\_]+$/|unique:users,name,' . Auth::id(),
            'email' => 'required|email',
            ...
        ];
    }
}

可以在表单请求类中通过messages()方法自定义表单的提示信息。

public function messages()
    {
        return [
            'name.unique' => '该用户名已被占用,请重新填写',
            'name.regex' => '用户名只支持英文、数字、横杠和下划线。',
            'name.between' => '用户名必须介于 3 - 25 个字符之间。',
            'name.required' => '用户名不能为空。',
        ];
    }

番外:对“依赖注入”的理解一直都不深刻,个人感觉这应该算是一个简单的“依赖注入”实例吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值