表单请求 统一字段不同场景不同处理
- 定义一个父类的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 协议》,转载必须注明作者和本文链接