以前呢,如果你是在controller里进行简单的数据验证,当然不优雅了,anyway,经常是这样的:

public function store()
{
    $this->validate(request(), [
        'title' => 'required',
        'body' => 'required'
    ]);

    // return Post::create(request()->only(['title', 'body'])); or
    return Post::create(request()->all());
}

那么,现在laravel 5.5里,我们可以直接将验证的数据取个变量,然后传到比如说create方法里:

public function store()
{
    $post = $this->validate(request(), [
        'title' => 'required',
        'body' => 'required'
    ]);

    return Post::create($post);
}

这也就相当于:

public function store()
{
    $post = request()->validate([
        'title' => 'required',
        'body' => 'required'
    ]);

    return Post::create($post);
}

也即直接在request()上来调用validate方法。当然,这里需要注意的一点是,你在validate方法中没有声明的字段,将默认被清空数据,或者说无法传递过去,那么要解决这个问题,你得在validate方法里声明你所有需要传递过去的字段,即使呢它不需要写任何的验证规则,类似这样:

$post = request()->validate([
        'title' => 'required',
        'body' => 'required',
        'notRequiredField' => '',
    ]);

return Post::create($post);

当然了,可以这样做,并不意味着你就一定这样做,并且也不意味着这就最规范的,我们提倡的,还是想在我们课程里讲的,用custom request class的方式来验证数据~