Skip to content

Conversation

@binaryfire
Copy link
Contributor

Summary

Laravel added contains and doesnt_contain validation rules for validating that arrays contain (or don't contain) specific values. This PR brings those rules to Hypervel with full enum support.


New Rules

contains

Validates that an array contains all of the specified values:

use Hypervel\Validation\Rule;

$validator = Validator::make($data, [
    'roles' => ['required', 'array', Rule::contains('admin', 'user')],
]);

// Or with enums
$validator = Validator::make($data, [
    'permissions' => Rule::contains(Permission::Read, Permission::Write),
]);

doesnt_contain

Validates that an array does not contain any of the specified values:

use Hypervel\Validation\Rule;

$validator = Validator::make($data, [
    'tags' => ['required', 'array', Rule::doesntContain('banned', 'restricted')],
]);

// Or with enums
$validator = Validator::make($data, [
    'statuses' => Rule::doesntContain(Status::Deleted, Status::Archived),
]);

Rule::dateTime()

Convenience method for validating datetime strings in Y-m-d H:i:s format:

use Hypervel\Validation\Rule;

$validator = Validator::make($data, [
    'published_at' => Rule::dateTime(),
]);

// Equivalent to:
$validator = Validator::make($data, [
    'published_at' => Rule::date()->format('Y-m-d H:i:s'),
]);

Changes

New Files

File Description
src/validation/src/Rules/Contains.php Contains rule class
src/validation/src/Rules/DoesntContain.php DoesntContain rule class
tests/Validation/ValidationContainsRuleTest.php Tests for Contains rule
tests/Validation/ValidationDoesntContainRuleTest.php Tests for DoesntContain rule

Modified Files

File Changes
src/validation/src/Rule.php Added contains(), doesntContain(), dateTime() static methods
src/validation/src/Concerns/ValidatesAttributes.php Added validateDoesntContain() method
src/translation/lang/en/validation.php Added messages for can, contains, doesnt_contain

Enum Support

Both rules support all enum types:

// String-backed enum
enum Permission: string {
    case Read = 'read';
    case Write = 'write';
}
Rule::contains(Permission::Read); // contains:"read"

// Int-backed enum
enum Priority: int {
    case Low = 1;
    case High = 2;
}
Rule::contains(Priority::High); // contains:"2"

// Unit enum (non-backed)
enum Tag {
    case Featured;
    case Promoted;
}
Rule::contains(Tag::Featured); // contains:"Featured"

Port Laravel's Contains and DoesntContain validation rules to Hypervel:

- Add Contains rule class for validating arrays contain required values
- Add DoesntContain rule class for validating arrays don't contain forbidden values
- Add validateDoesntContain() validator method
- Add Rule::contains(), Rule::doesntContain(), Rule::dateTime() static methods
- Add validation messages for 'can', 'contains', 'doesnt_contain'
- Full enum support (string-backed, int-backed, unit enums)
- Comprehensive tests for both rules
@binaryfire binaryfire changed the title feat: port missing Laravel calidation rules feat: port missing Laravel validation rules Jan 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant