一个 Laravel 5 的表单请求验证的例子

正在学习Laravel 5,最近用到了表单验证请求,写了一个表单请求验证的例子,希望对和我一样的新手有帮助。

使用Artisan命令建立一个表单验证请求类,该类会被创建在app/Http/Requests/Users目录下,可以根据实际情况改变路径。

php artisan make:request Users/PermissionFormRequest

这个类是作为新增编辑表单验证的基类使用,其中只定义验证规则和自定义的错误信息。

    use App\Http\Requests\Request;

    class PermissionFormRequest extends Request {

        protected $rules = [
            'name' => ['required', 'unique:permissions,name'],
            'display_name' => ['required'],
            'description' => ['max:100'],
        ];

        protected $messages = [
            'name.unique' => '“权限名称”已存在。',
            'name.required' => '必须填写“权限名称”',
            'display_name.required' => '必须填写“权限显示名称”。',
            'description.max' => '“权限说明”不能大于100个字。',
        ];

        public function authorize()
        {
            return true;
        }
    }

app/Http/Requests/Users目录下建立一个AddPermissionFormRequest类用于新增的表单验证,该类继承于PermissionFormRequest类。

    class AddPermissionFormRequest extends PermissionFormRequest {

        public function rules()
        {
            return $this->rules;
        }

        public function messages()
        {
            return $this->messages;
        }
    }

app/Http/Requests/Users目录下再建立一个EditPermissionFormRequest类用于编辑的表单验证,该类同样继承于PermissionFormRequest类,其中使用$this->route()来获取Uri参数,这里是获取{id}

    class EditPermissionFormRequest extends PermissionFormRequest {

        public function rules()
        {
            $id = $this->route('id');
            $rules = $this->rules;
            $rules['name'] = ['required', 'unique:permissions,name,'.$id];

            return $rules;
        }

        public function messages()
        {
             return $this->messages;
       }
    }

在控制器类中加入类型提示。

    use App\Http\Requests\Users\AddPermissionFormRequest;
    use App\Http\Requests\Users\EditPermissionFormRequest;

    ...

    public function store(AddPermissionFormRequest $request)
    {
        $permission = new Permission();
        $permission->name = $request->get('name');
        $permission->display_name = $request->get('display_name');
        $permission->description = $request->get('description');
        $permission->save();

        return redirect(route('admin.users.permission.index'));
    }

    public function update(EditPermissionFormRequest $request, $id)
    {
        $permission = Permission::findOrFail($id);
        $permission->name = $request->get('name');
        $permission->display_name = $request->get('display_name');
        $permission->description = $request->get('description');
        $permission->save();

        return redirect(route('admin.users.permission.index'));
    }

当控制器的方法被调用前,表单请求已经验证了,意味着你不需要在控制器里写任何的验证逻辑。它已经验证完了!

如果验证失败,用户会收到一个重定向请求至上一个页面。而错误信息也已经存储至 session 中方便视图展示。

本帖已被设为精华帖!
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!