PHP

Enhancing Data Integrity with Domain Layer Validation in Filament Resources

Introduction

Ensuring data integrity is paramount for any robust application. In the Reimpact/platform, we're focusing on strengthening our Filament resources by implementing domain layer validation. This approach ensures that data adheres to business rules right at the entry point, leading to fewer errors and a more consistent data model.

The Need for Domain Layer Validation

Traditional validation often resides within the application layer, but incorporating it directly into the domain layer, specifically within Filament resources, offers several advantages. It enforces business logic consistently, reduces code duplication, and provides immediate feedback to users.

Implementing Validation Rules

We've introduced validation rules to several resources to ensure data consistency:

  • ProductResource: Enforces that mass_unit, dimension_unit, and volume_unit are required when a parent value is set and that minimalSellableQuantity is greater than 0.
  • MaterialResource: Implements dynamic characteristic options based on category and subcategory selections. It also mandates that plastic7_composition is required for other plastics (type 7), mass must be greater than 0, and unit requirements are conditionally validated.
  • RecipeResource: Ensures that the destination is NA when the product is returnable and prevents recycling when the product is not recyclable.

Practical Examples

Let's illustrate how to implement a conditional validation rule using PHP.

use Illuminate\Support\Facades\Validator;

// Example: Conditional validation for requiring 'composition' based on 'plastic_type'
$validator = Validator::make($data, [
    'plastic_type' => 'required',
    'composition' => 'required_if:plastic_type,7',
    'mass' => 'required|numeric|min:0',
]);

if ($validator->fails()) {
    // Handle validation errors
}

This example demonstrates how to require the composition field only when the plastic_type is equal to 7. We also ensure that the mass is present and a positive numeric value.

Benefits of This Approach

By integrating validation at the domain layer, we ensure:

  • Data Consistency: Rules are consistently applied across the application.
  • Improved User Experience: Immediate validation feedback helps users correct errors early.
  • Reduced Errors: Prevents invalid data from entering the system.

Conclusion

Implementing domain layer validation in Filament resources significantly enhances data integrity within Reimpact/platform. By enforcing business rules directly at the data entry points, we create a more reliable and consistent application. This approach reduces errors, improves user experience, and ensures that our data model remains robust and accurate.

Enhancing Data Integrity with Domain Layer Validation in Filament Resources
GERARDO RUIZ

GERARDO RUIZ

Author

Share: