Validation
简介
Laravel 提供了多种不同的处理方法来对应用程序传入的数据进行验证。默认情况下,Laravel 的基底控制器类使用了 ValidatesRequests
trait,其提供了一种便利的方法来使用各种强大的验证规则验证传入的 HTTP 请求。
验证快速上手
要了解 Laravel 相关的强大验证特色,先让我们来看看一个完整的表单验证示例以及返回错误消 息给用户。
定义路由
首先,我们假设在 routes/web.php
文件中定义了以下路由:
// 显示一个创建博客文章的表单...
Route::get('post/create', 'PostController@create');
// 保存一个新的博客文章...
Route::post('post', 'PostController@store');
GET
路由会显示一个用于创建新博客文章的表单,POST
路由则会将新的博客文章保存到数据库。
创建控制器
接下来,让我们来看下操作这些路由的控制器 。我们先让 store
方法空着:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class PostController extends Controller
{
/**
* 显示创建博客文章的表单。
*
* @return Response
*/
public function create()
{
return view('post.create');
}
/**
* 保存一个新的博客文章。
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
// 验证以及保存博客发表 文章...
}
}
编写验证逻辑
现在我们准备开始填写我们的 store
逻辑方法来验证我们博客发布的新文章。检查应用程序的基底控制器 (App\Http\Controllers\Controller
) 类你会看到这个类使用了 ValidatesRequests
trait。这个 trait 在你所有的控制器里提供了方便的 validate
验证方法。
validate
方法会接收 HTTP 传入的请求以及验证的规则。如果验证通过,你的代码就可以正常的运行。若验证失败,则会抛出异常错误消息并自动将其返回给用户。在一般的 HTTP 请求下,都会生成一个重定向响应,对于 AJAX 请求则会发送 JSON 响应。
让我们接着回到 store
方法来深入理解 validate
方法:
/**
* 保存一篇新的博客文章。
*
* @param Request $request
* @return Response
*/
public function store(Request $request)
{
$this->validate($request, [
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
// The blog post is valid, store in database...
}
如你所见,我们将本次 HTTP 请求及所需的验证规则传递至 validate
方法中。另外再提醒一次,如果验证失败,将会自动生成一个对应的响应。如果验证通过,那我们的控制器将会继续正常运行。