respect/validation
Powerful PHP validation engine with 150+ tested validators. Build readable, chainable rules like numeric()->positive()->between(). Includes advanced exception handling and thorough docs. Great for complex input validation in any PHP app.
Strengths:
v::numericVal()->positive()->between(1, 255)) align well with Laravel’s expressive syntax (e.g., Eloquent queries, Blade directives).ResultQuery objects enable granular error handling, useful for API responses (e.g., JSON:API-style error formatting).validate() calls in DTOs).Weaknesses:
validate() → validate() returning ResultQuery). Laravel’s default PHP version (8.2+) may lag behind.FormRequest, Validator facade, or ValidatesWhen traits.FormRequest::rules() with fluent validation (e.g., v::email()->notBlank()->assert($request->all())).#[Validators\Email]) mirrors Laravel’s #[Rule] (Spatie) but with more flexibility.ResultQuery maps cleanly to Laravel’s Validator::failed() or custom JSON responses.v::email() in controllers) before replacing FormRequest or Validator facade.Validator::extend() with custom Respect\Validation logic).Respect\Validation vs. Illuminate\Validation could lead to IDE/autoloading issues if not namespaced carefully.validate() → ResultQuery transitions).v::factory()) or complex compositions (v::shortCircuit()) could impact Laravel’s request lifecycle.ValidationException may require rewriting existing exception handlers (e.g., in API middleware).phpunit + Pest) for edge cases (e.g., nested arrays, recursive validation).config() to toggle between Respect\Validation and native validator.FormRequest to Respect\Validation").PHP Version Alignment:
Respect\Validation v3.0 stabilizes?Validation Layer Strategy:
FormRequest, Validator facade) or use Respect\Validation for specific use cases (e.g., complex DTOs)?Error Handling:
ResultQuery integrate with Laravel’s Validator::errors() or API exception handlers?ResultQuery to Illuminate\Validation\ValidationException.Performance:
Respect\Validation vs. Laravel’s validator for high-traffic endpoints (e.g., API rate limits).Maintenance:
Respect\Validation issues (e.g., bug fixes, PHP 8.6 compatibility)?rules() with fluent validation in authorize() or custom methods.
// Before: FormRequest::rules()
public function rules(): array {
return ['email' => 'required|email'];
}
// After: Respect\Validation
public function validate(array $data): void {
v::email()->required()->assert($data['email']);
}
Illuminate\Validation\Rules with Respect\Validation validators.
class UserDto {
#[Validators\Email] public string $email;
#[Validators\Between(18, 120)] public int $age;
}
ResultQuery to build structured error responses.
$result = v::allOf(
v::key('name', v::notBlank()),
v::key('email', v::email())
)->validate($request->all());
if ($result->hasFailed()) {
return response()->json([
'errors' => $result->getFullMessage()
], 422);
}
Rule classes with Respect\Validation validators.Phase 1: Pilot Projects
FormRequest rules with Respect\Validation.ResultQuery for API responses in a single module.Validator facade wrapper to abstract differences:
// app/Providers/AppServiceProvider.php
Validator::extend('respect', function ($attribute, $value, $parameters, $validator) {
$result = v::email()->assert($value);
if ($result->hasFailed()) {
$validator->errors()->add($attribute, $result->getFullMessage());
}
return !$result->hasFailed();
});
Phase 2: Core Integration
FormRequest and model validation.RespectValidator service to bridge Respect\Validation and Laravel’s Validator.Illuminate\Validation\Rules with Respect\Validation in DTOs.Phase 3: Full Replacement
Respect\Validation.Validator facade that delegates to Respect\Validation.Respect\Validation lacks Laravel’s Rule objects. Workaround: Create adapters or use v::satisfies().unique:table,column requires custom integration (e.g., database checks before Respect\Validation).ValidatesWhen trait needs a custom implementation using v::shortCircuit().Validator::extend() for DB checks, then pass to Respect\Validation.ValidatesWhen via v::factory():
v::factory(fn($data) => $data['active'] ? v::email() : v::nullable())
->assert($data);
FormRequest, Validator facade, custom rules).FormRequest rules incrementally (e.g., 1 request per sprint).deprecated() helper.How can I help you explore Laravel packages today?