创建表单请求验证

面对更复杂的情况,您可以创建一个「表单请求」来应对更复杂的验证逻辑。表单请求是一个包含了验证逻辑的自定义请求类。要创建一个表单请求类,请使用 make:request Artisan 命令:

  1. php artisan make:request 请求类名

该命令生成的类将被置于 app/Http/Requests 目录中。如果这个目录不存在,在您运行 make:request 命令后将会创建这个目录。

开启

如果想要使用这个请求类来接收请求,需将 authorize 方法返回 true。如果 authorize 方法返回 false,则会自动返回一个包含 403 状态码的 HTTP 响应,也不会运行控制器的方法。

/**
 * 判断用户是否有请求权限
 *
 * @return bool
 */
public function authorize()
{
    return true;
}

让我们添加一些验证规则到 rules 方法中:

/**
 * 获取应用于请求的规则
 *
 * @return array
 */
public function rules()
{
    return [
        'title' => 'required|unique:posts|max:50',
        'body' => 'required',
    ];
}

自定义错误消息

你可以通过重写表单请求的 messages 方法来自定义错误消息。此方法应返回属性 / 规则对及其对应错误消息的数组:

/**
 * 获取已定义验证规则的错误消息
 *
 * @return array
 */
public function messages()
{
    return [
        'title.required' => '标题不能为空',
        'title.max' => '标题不能超过50个字符',
        'body.required' => '内容不能为空',
    ];
}

使用

所以,验证规则是如何运行的呢?你所需要做的就是在控制器方法中类型提示传入的请求。在调用控制器方法之前验证传入的表单请求,这意味着你不需要在控制器中写任何验证逻辑:

/**
 * 存储传入的博客文章
 *
 * @param  StoreBlogPost  $request
 * @return Response
 */
public function create(DingRequest $request)
{
    // 获取通过验证的数据...
    $all = $request->all();
}