Product Decisions This Supports
- Build vs. Buy: Accelerates development of validation-heavy applications by eliminating custom validation logic, reducing technical debt, and enabling faster iteration.
- Feature Expansion: Enables self-validating Eloquent models without bloating controllers or middleware, aligning with clean architecture principles.
- Roadmap Prioritization: Justifies investment in data integrity and API consistency for projects with complex validation rules (e.g., SaaS platforms, e-commerce, or regulatory-compliant systems).
- Use Cases:
- API-Driven Apps: Automatically validate incoming requests at the model layer (e.g.,
User::create($request->all())).
- Admin Panels: Enforce validation rules for CRUD operations without repetitive form validation logic.
- Legacy System Modernization: Retrofit validation to existing Eloquent models without rewriting business logic.
- Multi-Tenant Apps: Validate tenant-specific rules dynamically (e.g.,
User::validate($request, $tenant->rules)).
When to Consider This Package
Adopt if:
- Your Laravel app relies on Eloquent models and needs declarative validation (e.g.,
rules() method per model).
- You’re tired of repetitive FormRequest classes or middleware for validation—shift logic to the model layer.
- Your team prioritizes DRY (Don’t Repeat Yourself) principles for validation rules (e.g., shared rules across APIs/admin panels).
- You need flexible validation (e.g., conditional rules, dynamic messages, or custom error handling) without Laravel’s default
FormRequest limitations.
- Your project uses other
sofa/eloquence-* packages (e.g., Searchable, Metable) for consistency in model extensions.
Look elsewhere if:
- You’re using non-Eloquent models (e.g., raw queries, Query Builder).
- Your validation needs are simple (e.g., basic
required|email rules handled by FormRequests).
- You require real-time validation (e.g., frontend frameworks like Vue/React with Laravel Sanctum)—this package is backend-focused.
- Your team lacks PHP/Laravel expertise to integrate custom model traits.
- The package’s last release (2020) is a concern—evaluate maintenance risk or fork if critical bugs arise.
How to Pitch It (Stakeholders)
For Executives:
"This package lets us embed validation directly into our data models, cutting redundant code and reducing bugs in APIs/admin panels. For example, instead of writing a StoreUserRequest class for every CRUD operation, we define rules once in the User model. This saves dev time, improves maintainability, and aligns with our goal of [X metric, e.g., faster feature releases or lower support costs]. The trade-off is minimal—we adopt a well-tested Laravel extension with MIT licensing, and the team can integrate it incrementally."
For Engineers:
*"eloquence-validable adds a rules() method to Eloquent models, enabling self-validating entities with syntax like:
class User extends Model {
use \Sofa\Eloquence\Validable\Validable;
public function rules() {
return [
'email' => ['required', 'email', Rule::unique('users')],
'password' => ['min:8', 'confirmed'],
];
}
}
Pros:
- No more FormRequest classes for simple validation.
- Reusable rules across APIs, CLI, and admin panels.
- Dynamic validation: Pass custom rules at runtime (e.g.,
User::validate($data, ['email' => ['required_if' => 'is_admin']])).
- Integrates with other
sofa/eloquence-* packages for a cohesive model extension suite.
Cons:
- Last updated in 2020—vet for critical bugs or fork if needed.
- Learning curve for teams unfamiliar with model-level validation.
Recommendation: Pilot with 1–2 high-traffic models (e.g., User, Order) to measure dev time savings before full adoption."*