craftcms/laravel-ruleset-validation
Validate Laravel request data against Craft CMS field rulesets. Map Craft-style constraints (required, min/max, regex, etc.) into Laravel’s validator, keeping validation logic consistent between Craft and Laravel apps.
FormRequest classes. Ideal for complex workflows like multi-step forms, API payload validation, or business rule enforcement (e.g., "A user with role X must validate Y").FormRequest, Validator) is sufficient. Buy this package if you need scenarios, object-backed validation, or reduced coupling between rules and request handlers.phone only if country is US").Ruleset dependencies).CreatePostRuleset::SCENARIO_DRAFT vs. SCENARIO_PUBLISHED).Rule:: chains per endpoint).FormRequest but want to reduce coupling between rules and request handlers.CreateUserCommand).required|email).For Executives:
"This package lets us build validation logic once and reuse it everywhere—like a ‘validation Lego set’ for our app. For example, if we’re launching a new subscription flow, we can define rules for plan tiers, payment methods, and user eligibility in one Ruleset class, then apply them to web forms, APIs, and admin dashboards. This cuts development time by 30–50% for validation-heavy features and reduces bugs from inconsistent rules. It’s MIT-licensed, integrates with our Laravel stack, and future-proofs our codebase for new workflows."
For Engineering:
*"Laravel-ruleset-validation lets you move validation out of controllers into reusable Ruleset classes. Key wins:
Rule::when('is_admin', fn() => Rule::exists('permissions'))) and reuse across FormRequest, DTOs, or controllers.User models or external APIs).CreatePostData).useScenario('draft') vs. useScenario('published')).['title', 'slug'] with $ruleset->only(['title', 'slug'])->validate().authorize(), messages(), validated()).FormRequest subclasses needed for simple cases—just type-hint the Ruleset in your controller.Example:
// Define once
class CreatePostRuleset extends Ruleset {
public function rules() {
return ['title' => ['required'], 'body' => ['nullable']];
}
}
// Reuse everywhere
$postData = new CreatePostData(title: 'Hello', body: 'World');
$validated = $postData->ruleset->validate(); // Validates DTO
// Or in a controller
public function store(CreatePostRuleset $ruleset) {
$validated = $ruleset->validate(); // Validates request
}
Trade-offs:
Validator calls, but negligible for most apps).
Recommendation: Pilot this for one validation-heavy feature (e.g., user onboarding) to measure impact before rolling out broadly."*How can I help you explore Laravel packages today?