EmailAddress, CreditCardNumber, CustomId). Reduces boilerplate validation logic in controllers/services by encapsulating rules within domain objects.Validator, FormRequest, or custom validation rules.apie/core) reduce integration risk. Can be isolated via Composer replacements or forking.Illuminate\Validation\Rule or creating a Validator extension). This adds initial development overhead but enables flexibility.Respect/Validation) for critical paths.phpunit in require-dev) raises concerns about edge-case handling (e.g., Unicode regex, catastrophic backtracking).Validator)?Respect/Validation)?Illuminate\Validation\Rule or packages like spatie/laravel-validation-rules achieve similar goals with lower risk?Email, PhoneNumber, CustomId, etc.FormRequest rules) or API resource sanitization.Validator but does not replace it. Ideal for complex regex rules where built-in validators fall short.Phase 1: Proof of Concept (1–2 weeks)
EmailValueObject) to validate the integration approach.PHPBench).Phase 2: Core Integration (2–3 weeks)
Illuminate\Validation\Rule for FormRequest validation.Validator extension for global validation rules.use Apie\RegexValueObjects\Email;
use Illuminate\Validation\Rule;
class RegexRule extends Rule {
protected $pattern;
public function __construct(string $pattern) {
$this->pattern = $pattern;
}
public function validate($attribute, $value, $fail) {
try {
new RegexValueObject($value, $this->pattern);
} catch (\InvalidArgumentException $e) {
$fail($e->getMessage());
}
}
}
composer.json to isolate dependencies (e.g., replace apie/core).Phase 3: Domain-Wide Adoption (Ongoing)
"replacements": {
"apie/core": "self.version"
}
or by forking the package.Validator extension. Ensure error messages align with Laravel’s format:
// Example: Custom error message integration
$validator = Validator::make($data, [
'email' => ['required', new RegexRule('/^...$/', 'Invalid email format')],
]);
unique or check constraints).RegexRule).Illuminate\Validation\Validator for global rules.preg_compile).Email, UUID).How can I help you explore Laravel packages today?