Validation
简介
Laravel 提供了几种不同的方法来验证传入应用程序的数据。最常见的做法是在所有传入的 HTTP 请求中使用 validate
方法。但是,我们还将讨论其他验证方法。
Laravel 包含了各种方便的验证规则,你可以将它们应用于数据,甚至可以验证给定数据库表中的值是否唯一。我们将详细介绍每个验证规则,以便你熟悉 Laravel 的所有验证功能。
快速验证
为了了解 Laravel 强大的验证功能,我们来看一个表单验证并将错误消息展示给用户的完整示例。通过阅读概述,这将会对你如何使用 Laravel 验证传入的请求数据有一个很好的理解:
定义路由
首先,假设我们在 routes/web.php
路由文件中定义了下面这些路由:
use App\Http\Controllers\PostController;
Route::get('/post/create', [PostController::class, 'create']);
Route::post('/post', [PostController::class, 'store']);
GET
路由会显示一个供用户创建新博客文章的表单,而 POST
路由会将新的博客文章存储到数据库中。
创建控制器
接下来,让我们一起来看看处理这些路由的简单控制器。我们暂时留空了 store 方法:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PostController extends Controller
{
/**
* 显示创建博客文章的表单。
*
* @return \Illuminate\View\View
*/
public function create()
{
return view('post.create');
}
/**
* 存储一篇新的博客文章。
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
// Validate and store the blog post...
}
}
编写验证逻辑
现在我们开始在 store
方法中编写用来验证新的博客文章的逻辑代码。为此,我们将使用 Illuminate\Http\Request
类提供的 validate
方法。如果验证通过,你的代码会继续正常运行。如果验证失败,则会抛出Illuminate\Validation\ValidationException
异常,并自动将对应的错误响应返回给用户。
如果在传统 HTTP 请求期间验证失败,则会生成对先前 URL 的重定向响应。如果传入的请求是 XHR,将将返回包含验证错误信息的 JSON 响应。
为了深入理解 validate
方法,让我们接着回到 store
方法中:
/**
* 存储一篇新的博客文章。
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|unique:posts|max:255',
'body' => 'required',
]);
// 博客文章验证通过...
}
如您所见,验证规则被传递到 validate
方法中。不用担心 - 所有可用的验证规则均已记录在案。另外再提醒一次,如果验证失败,会自动生成一个对应的响应。如果验证通过,那我们的控制器会继续正常运行。
或者,验证规则可以使用数组而不是单个 |
分隔的字符串:
$validatedData = $request->validate([
'title' => ['required', 'unique:posts', 'max:255'],
'body' => ['required'],
]);
另外,你可以使用 validateWithBag
方法来验证请求,并将所有错误信息储存在一个命名错误信息包:
$validatedData = $request->validateWithBag('post', [
'title' => ['required', 'unique:posts', 'max:255'],
'body' => ['required'],
]);