Laravel
Request validation
PHP autodoc-laravel automatically determines request body type by analyzing your request validation rules. It supports the following Laravel validation rules:
- array
- boolean
- confirmed
- current_password
- date
- in
- integer
- ipv4
- ipv6
- nullable
- numeric
- min
- max
- object
- present
- required
- required_array_keys
- required_if*
- required_if_accepted*
- required_if_declined*
- required_unless*
- required_with*
- required_with_all*
- required_without*
- required_without_all*
- string
- uuid
- url
- Illuminate\Validation\Rules\ArrayRule
- Illuminate\Validation\Rules\Enum
- Illuminate\Validation\Rules\Email
- Illuminate\Validation\Rules\In
- Illuminate\Validation\Rules\Password
* - Not supported by OpenApi 3.1. For this rule a description will be generated for the associated parameter. You can enable/disable this behavior with laravel.generate_descriptions_from_validation_rules
configuration option.
Example 1
This example demonstrates the support for PHPDoc annotations, PHPStan type aliases and some validation rules.
/**
* @phpstan-type Symbol 'a'|'b'|'c'
*/
class ExampleController extends Controller
{
public function create(Request $request)
{
$request->validate([
'records' => 'required|array',
/**
* This parameter reads type from `@var` tag.
*
* @var Symbol
*/
'records.*.symbol' => 'sometimes',
'records.*.count' => 'integer|nullable|min:0',
/**
* @example 2024-10-20
*/
'records.*.created_at' => 'date',
/**
* @var array<string, array{
* count: int,
* symbol: Symbol,
* }>
*/
'key\.with_dot' => 'required',
]);
// ...
}
}


Example 2
This example demonstrates more advanced expressions that affect both request and response body.
use Illuminate\Validation\Rules\Enum;
// ...
public function addIp(): JsonResponse
{
$validationRules = [
'ip_address_v4' => ['nullable', 'ipv4'],
'ip_address_v6' => [
'nullable',
'ipv6',
'required_without:ip_address_v4',
],
'type' => ['required', new In(['static', 'dynamic'])],
];
$validationRules['status'][] = new Enum(IpStatusEnum::class);
$validationRules['status'][] = 'required';
$validated = request()->validate($validationRules);
$isPending = $validated['status'] === IpStatusEnum::Pending;
return response()->json([
'success' => true,
'type_added' => $isPending
? $validated['type']
: null,
]);
}


Example 3
use Illuminate\Http\Request;
use Illuminate\Validation\Rules\Enum;
// ...
public function sendFeedback(Request $request)
{
$request->validate([
'message' => ['required', 'string', 'min:1', 'max:1000'],
'category' => [
'required',
new Enum(FeedbackCategory::class),
],
'priority' => 'in:low,high',
'explanation' => 'required_if:priority,high',
]);
}


Example 4
This example is based on default /reset-password route provided by Laravel 12.
use Illuminate\Http\Request;
use Illuminate\Validation\Rules\Password;
// ...
/**
* Handle an incoming new password request.
*/
public function store(Request $request): RedirectResponse
{
$request->validate([
'token' => 'required',
'email' => 'required|email',
'password' => [
'required',
'confirmed',
Password::defaults(),
],
]);
// ...
}

