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
- 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(),
],
]);
// ...
}


How to enable
To enable reading request body from Laravel request validate
method, make sure you have the following entries in extensions
array in your configuration file (enabled by default).
'extensions' => [
/**
* To enable support for `validate` method on Request class
*/
AutoDoc\Laravel\Extensions\RequestValidate::class,
/**
* To enable support for `Rule::enum(..)` and `Rule::in(..)`
*/
AutoDoc\Laravel\Extensions\ValidationRuleStaticCall::class,
],