戏里戏外

Laravel 验证:首次验证失败即停止

2024-11-14#Laravel

Laravel 支持使用 stopOnFirstFailure 方法和 bail 规则来在第一个验证失败时停止验证。

它们的区别是:

  • stopOnFirstFailure 方法是在第一个字段验证失败时就停止所有验证,它只返回第一个字段的错误信息,适用于想要立即返回的场景。
  • bail 规则只会停止当前字段的后续验证规则,会继续验证其他字段,返回所有字段的错误信息,适用于想要返回所有错误信息的场景。

使用 stopOnFirstFailure() 方法

stopOnFirstFailure() 方法用于在第一个验证失败时停止验证。

$validated = $request->validate([
  'email' => 'required|email|unique:users',
  'name' => 'required|min:3',
  'password' => 'required|min:6'
])->stopOnFirstFailure();
class UserStoreRequest extends FormRequest
{
  protected bool $stopOnFirstFailure = true;

  public function rules()
  {
    return [
      'email' => 'required|email|unique:users',
      'name' => 'required|min:3',
      'password' => 'required|min:6'
    ];
  }
}

使用 bail 规则

bail 规则用于当前字段在第一个验证失败时停止验证。

class UserStoreRequest extends FormRequest
{
  public function rules()
  {
    return [
      'email' => 'bail|required|email|unique:users',
      'name' => 'bail|required|min:3',
      'password' => 'bail|required|min:6'
    ];
  }
}

使用建议

  • 如果需要尽快返回响应,使用 stopOnFirstFailure()

  • 如果需要收集所有字段的第一个错误,使用 bail

  • 在 API 开发中,stopOnFirstFailure() 通常更实用

  • 在表单验证中,bail 可以提供更完整的错误信息