validate method

Future<Map<String, dynamic>> validate(
  1. Request request
)

Validate the request using the defined rules and authorization.

This is the main method that orchestrates the entire FormRequest lifecycle:

  1. Stores the request reference
  2. Checks authorization via authorize
  3. Calls prepareForValidation for data preparation
  4. Performs validation using the request's validate method
  5. Calls passedValidation for post-validation processing
  6. Handles validation failures via failedValidation

The method returns the validated and processed data, or throws an exception if validation or authorization fails.

Example:

// In a controller
static Future<void> store(Request req, Response res) async {
  try {
    final formRequest = CreateUserRequest();
    final validated = await formRequest.validate(req);

    final user = await User.create(validated);
    res.status(201).sendJson({'user': user});
  } on UnauthorizedException catch (e) {
    res.status(403).sendJson({'error': e.message});
  } on ValidationException catch (e) {
    res.status(422).sendJson({'errors': e.errors});
  }
}

Parameters:

  • request: The request instance to validate

Returns: A Future that completes with the validated data map

Throws:

Implementation

Future<Map<String, dynamic>> validate(Request request) async {
  _request = request;
  if (!authorize(request)) {
    throw UnauthorizedException('This action is unauthorized.');
  }
  await prepareForValidation(request);
  try {
    _validatedData = await request.validate(rules(), messages: messages());
    passedValidation(_validatedData!);
    return _validatedData!;
  } catch (e) {
    if (e is ValidationException) {
      failedValidation(e.errors);
    }
    rethrow;
  }
}