天天看点

Laravel Validation 表单验证(一、快速验证)

Laravel 提供了几种不同的方法来验证传入应用程序的数据。默认情况下,Laravel 的控制器基类使用 ValidatesRequests trait,它提供了一种方便的方法去使用各种强大的验证规则来验证传入的 HTTP 请求。

先看段简单的验证逻辑

$validatedData = $request->validate([
        'title' => 'required|unique:posts|max:255',
        'body' => 'required',
    ]);      

使用 ​

​Illuminate\Http\Request​

​​ 对象提供的 ​

​validate​

​ 方法 。如果验证通过,代码就可以正常的运行。如果验证失败,则会抛出异常,并自动将对应的错误响应返回给用户。

或者,验证规则可以指定为一个数组而不是单个 ​

​|​

​ 分隔字符串:

$validatedData = $request->validate([
    'title' => ['required', 'unique:posts', 'max:255'],
    'body' => ['required'],
]);      

首次验证失败后停止运行

如果你希望在某个属性第一次验证失败后停止运行验证规则,你需要附加 ​

​bail​

​ 规则到该属性:

$request->validate([
    'title' => 'bail|required|unique:posts|max:255',
    'body' => 'required',
]);      

在这个例子中,如果 ​

​title​

​​ 字段没有通过 ​

​unique​

​​ 规则,那么程序就不会继续检查 ​

​max​

​ 规则。规则会按照分配的顺序来验证。

关于数组数据的注意实现

如果你的 HTTP 请求包含一个 「嵌套」 参数(即数组),那你可以在验证规则中通过 「点」 语法来指定这些参数:

$request->validate([
    'title' => 'required|unique:posts|max:255',
    'author.name' => 'required',
    'author.description' => 'required',
]);      

显示验证错误信息

如果传入的请求参数未通过给定的验证规则呢?正如前面所提到的,Laravel 会自动把用户重定向到之前的位置。另外,所有的验证错误信息会被自动 存储到 session。

重申一次,我们不必在 GET 路由中将错误消息显式绑定到视图。因为 Lavarel 会检查在 Session 数据中的错误信息,并自动将其绑定到视图(如果这个视图文件存在)。而其中的变量 $errors 是 Illuminate\Support\MessageBag 的一个实例。

注意:$errors 变量被 web 中间件组提供的 Illuminate\View\Middleware\ShareErrorsFromSession 中间件绑定到视图中。 当这个中间件被应用后,在你的视图中就可以获取到 $error 变量 , 可以使一直假定 $errors 变量存在并且可以安全地使用。

关于可选字段的注意事项

默认情况下,在 Laravel 应用的全局中间件堆栈 App\Http\Kernel 类中包含了 TrimStrings 和 ConvertEmptyStringsToNull 中间件。因此,如果你不希望验证程序将 null 值视为无效的话,那就需要将「可选」的请求字段标记为 nullable,举个例子:

$request->validate([
    'title' => 'required|unique:posts|max:255',
    'body' => 'required',
    'publish_at' => 'nullable|date',
]);      

指定 ​

​publish_at​

​​ 字段可以为 ​

​null​

​​ 或者一个有效的日期格式。如果 ​

​nullable​

​​ 的修饰词没有被添加到规则定义中,验证器会认为 ​

​null​

​ 是一个无效的日期格式。

AJAX 请求 & 验证