validate method
Validate the request using the defined rules and authorization.
This is the main method that orchestrates the entire FormRequest lifecycle:
- Stores the request reference
- Checks authorization via authorize
- Calls prepareForValidation for data preparation
- Performs validation using the request's validate method
- Calls passedValidation for post-validation processing
- 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:
- UnauthorizedException if authorize returns
false - ValidationException if validation fails
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;
}
}