Laravel Data provides validation attributes that correspond to Laravel’s validation rules. Use these attributes on data properties to automatically generate validation rules.
String Validation
Docs #[ Alpha ]
public string $name ;
Docs #[ AlphaDash ]
public string $username ;
Docs #[ AlphaNumeric ]
public string $code ;
Docs #[ StringType ]
public string $text ;
Docs #[ Lowercase ]
public string $email ;
Docs #[ Uppercase ]
public string $countryCode ;
Numeric Validation
Docs #[ IntegerType ]
public int $count ;
Docs #[ Numeric ]
public string | int | float $amount ;
Docs #[ Min ( 20 )]
public int $age ;
Docs #[ Max ( 100 )]
public int $percentage ;
Docs #[ Between ( 3.14 , 42 )]
public float $value ;
Docs #[ Digits ( 10 )]
public int $phoneNumber ;
Docs #[ DigitsBetween ( 2 , 10 )]
public int $code ;
Docs #[ MinDigits ( 2 )]
public int $value ;
Docs #[ MaxDigits ( 10 )]
public int $value ;
Docs #[ MultipleOf ( 3 )]
public int $quantity ;
Date Validation
Docs #[ Date ]
public Carbon $date ;
Docs #[ DateEquals ( 'tomorrow' )]
public Carbon $date ;
#[ DateEquals ( Carbon :: yesterday ())]
public Carbon $date ;
Docs #[ After ( 'tomorrow' )]
public Carbon $date ;
#[ After ( Carbon :: yesterday ())]
public Carbon $date ;
#[ After ( new FieldReference ( 'start_date' ))]
public Carbon $endDate ;
Docs #[ AfterOrEqual ( 'tomorrow' )]
public Carbon $date ;
#[ AfterOrEqual ( new FieldReference ( 'start_date' ))]
public Carbon $endDate ;
Docs #[ Before ( 'tomorrow' )]
public Carbon $date ;
#[ Before ( new FieldReference ( 'end_date' ))]
public Carbon $startDate ;
Docs #[ BeforeOrEqual ( 'tomorrow' )]
public Carbon $date ;
#[ BeforeOrEqual ( new FieldReference ( 'end_date' ))]
public Carbon $startDate ;
Boolean & Acceptance
Docs #[ BooleanType ]
public bool $active ;
Docs #[ Accepted ]
public bool $termsAccepted ;
Docs #[ AcceptedIf ( 'other_field' , 'equals_this' )]
public bool $confirmation ;
Docs #[ Declined ]
public bool $optOut ;
Docs #[ DeclinedIf ( 'other_field' , 'equals_this' )]
public bool $optOut ;
Array Validation
Docs #[ ArrayType ]
public array $items ;
#[ ArrayType ([ 'valid_key' , 'other_valid_key' ])]
public array $items ;
#[ ArrayType ( 'valid_key' , 'other_valid_key' )]
public array $items ;
Docs #[ ListType ]
public array $items ;
Docs #[ RequiredArrayKeys ( 'a' )]
public array $items ;
#[ RequiredArrayKeys ([ 'a' , 'b' ])]
public array $items ;
#[ RequiredArrayKeys ( 'a' , 'b' )]
public array $items ;
Docs #[ Distinct ]
public string $value ;
#[ Distinct ( Distinct :: Strict )]
public string $value ;
#[ Distinct ( Distinct :: IgnoreCase )]
public string $value ;
String Patterns
Docs #[ StartsWith ( 'a' )]
public string $value ;
#[ StartsWith ([ 'a' , 'b' ])]
public string $value ;
#[ StartsWith ( 'a' , 'b' )]
public string $value ;
Docs #[ EndsWith ( 'a' )]
public string $value ;
#[ EndsWith ([ 'a' , 'b' ])]
public string $value ;
Docs #[ DoesntStartWith ( 'a' )]
public string $value ;
#[ DoesntStartWith ([ 'a' , 'b' ])]
public string $value ;
Docs #[ DoesntEndWith ( 'a' )]
public string $value ;
Docs #[ Regex ( '/ ^ . +$ /i' )]
public string $value ;
Docs #[ NotRegex ( '/ ^ . +$ /i' )]
public string $value ;
Email & URL
Docs #[ Email ]
public string $email ;
#[ Email ( Email :: RfcValidation )]
public string $email ;
#[ Email ([ Email :: RfcValidation , Email :: DnsCheckValidation ])]
public string $email ;
Docs #[ Url ]
public string $website ;
#[ Url ([ 'http' , 'https' ])]
public string $website ;
Docs #[ ActiveUrl ]
public string $website ;
IP & Network
Docs #[ IP ]
public string $ipAddress ;
Docs #[ IPv4 ]
public string $ipAddress ;
Docs #[ IPv6 ]
public string $ipAddress ;
Docs #[ MacAddress ]
public string $macAddress ;
Database
Docs #[ Exists ( 'users' )]
public string $userId ;
#[ Exists ( User :: class )]
public string $userId ;
#[ Exists ( 'users' , 'email' )]
public string $email ;
#[ Exists ( 'users' , 'email' , connection : 'tenant' )]
public string $email ;
#[ Exists ( 'users' , 'email' , withoutTrashed : true )]
public string $email ;
Docs #[ Unique ( 'users' )]
public string $email ;
#[ Unique ( User :: class )]
public string $email ;
#[ Unique ( 'users' , 'email' )]
public string $email ;
#[ Unique ( 'users' , connection : 'tenant' )]
public string $email ;
#[ Unique ( 'users' , withoutTrashed : true )]
public string $email ;
#[ Unique ( 'users' , ignore : 5 )]
public string $email ;
#[ Unique ( 'users' , ignore : new AuthenticatedUserReference ())]
public string $email ;
#[ Unique ( 'posts' , ignore : new RouteParameterReference ( 'post' ))]
public string $slug ;
File Validation
Docs #[ File ]
public UploadedFile $document ;
Docs #[ Image ]
public UploadedFile $photo ;
Docs #[ Mimes ( 'jpg' )]
public UploadedFile $image ;
#[ Mimes ([ 'jpg' , 'png' ])]
public UploadedFile $image ;
#[ Mimes ( 'jpg' , 'png' )]
public UploadedFile $image ;
Docs #[ MimeTypes ( 'video/quicktime' )]
public UploadedFile $video ;
#[ MimeTypes ([ 'video/quicktime' , 'video/avi' ])]
public UploadedFile $video ;
Docs #[ Dimensions ( ratio : 1.5 )]
public UploadedFile $image ;
#[ Dimensions ( maxWidth : 100 , maxHeight : 100 )]
public UploadedFile $image ;
Field Relationships
Docs #[ Required ]
public string $name ;
Docs #[ RequiredIf ( 'other_field' , 'value' )]
public ? string $conditional ;
#[ RequiredIf ( 'other_field' , [ 'value' , 'another_value' ])]
public ? string $conditional ;
Docs #[ RequiredUnless ( 'other_field' , 'value' )]
public ? string $conditional ;
Docs #[ RequiredWith ( 'other_field' )]
public ? string $conditional ;
#[ RequiredWith ([ 'other_field' , 'another_field' ])]
public ? string $conditional ;
Docs #[ RequiredWithAll ([ 'other_field' , 'another_field' ])]
public ? string $conditional ;
Docs #[ RequiredWithout ( 'other_field' )]
public ? string $conditional ;
Docs #[ RequiredWithoutAll ([ 'other_field' , 'another_field' ])]
public ? string $conditional ;
Docs #[ Same ( 'other_field' )]
public string $confirmation ;
Docs #[ Different ( 'other_field' )]
public string $value ;
Docs #[ Confirmed ]
public string $password ;
Advanced
Docs #[ Enum ( ChannelType :: class )]
public string $channel ;
#[ Enum ( ChannelType :: class , only : [ ChannelType :: Email ])]
public string $channel ;
#[ Enum ( ChannelType :: class , except : [ ChannelType :: Email ])]
public string $channel ;
Docs #[ Uuid ]
public string $id ;
Docs #[ Ulid ]
public string $id ;
Docs #[ Json ]
public string $metadata ;
Docs #[ TimeZone ]
public string $timezone ;
Docs #[ Password ( min : 12 , letters : true , mixedCase : true , numbers : false , symbols : false , uncompromised : true , uncompromisedThreshold : 0 )]
public string $password ;
Docs #[ CurrentPassword ]
public string $currentPassword ;
#[ CurrentPassword ( 'api' )]
public string $currentPassword ;
Special Rules
Define custom validation rules: #[ Rule ( 'string|uuid' )]
public string $id ;
#[ Rule ([ 'string' , 'uuid' ])]
public string $id ;
Docs #[ Nullable ]
public ? string $optionalField ;
Docs #[ Sometimes ]
public string $value ;
Docs #[ Bail ]
public string $value ;
Docs #[ Filled ]
public string $value ;
Docs #[ Present ]
public string $value ;
Comparison
Docs #[ GreaterThan ( 'other_field' )]
public int $value ;
Docs #[ GreaterThanOrEqualTo ( 'other_field' )]
public int $value ;
Docs #[ LessThan ( 'other_field' )]
public int $value ;
Docs #[ LessThanOrEqualTo ( 'other_field' )]
public int $value ;
Docs #[ Size ( 10 )]
public string $value ;
Lists & Values
Docs #[ In ([ 1 , 2 , 3 , 'a' , 'b' ])]
public mixed $value ;
#[ In ( 1 , 2 , 3 , 'a' , 'b' )]
public mixed $value ;
Docs #[ NotIn ([ 1 , 2 , 3 , 'a' , 'b' ])]
public mixed $value ;
Docs #[ InArray ( 'other_field' )]
public string $value ;
Prohibition
Docs #[ Prohibited ]
public ? string $value ;
Docs #[ ProhibitedIf ( 'other_field' , 'has_value' )]
public ? string $value ;
#[ ProhibitedIf ( 'other_field' , [ 'has_value' , 'or_this_value' ])]
public ? string $value ;
Docs #[ ProhibitedUnless ( 'other_field' , 'has_value' )]
public ? string $value ;
Docs #[ Prohibits ( 'other_field' )]
public ? string $value ;
#[ Prohibits ([ 'other_field' , 'another_field' ])]
public ? string $value ;
Exclusion
At the moment the data is not yet excluded due to technical reasons. Version 4 should fix this.
Docs #[ ExcludeIf ( 'other_field' , 'has_value' )]
public string $value ;
Docs #[ ExcludeUnless ( 'other_field' , 'has_value' )]
public string $value ;
Docs #[ ExcludeWith ( 'other_field' )]
public string $value ;
Docs #[ ExcludeWithout ( 'other_field' )]
public string $value ;