表单请求 统一字段不同场景不同处理

  1. 定义一个父类的request,然后搞俩子类request,在子类中实现差异(引用的LiuBo2015,记录用)
    正在学习 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 中方便视图展示。

2.自定义规则:rule

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

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