Validation
Validate modules and their dependencies
Module Validation
The validation system checks modules for correctness and compatibility.
Validate All Modules
php artisan modular:validate
Validate Specific Module
php artisan modular:validate Blog
What Gets Validated
1. Manifest Structure
- Valid JSON syntax
- Required fields present (
name,version) - Valid version format (semver)
- Valid provider class names
2. Dependencies
- Required modules exist
- Version constraints satisfied
- No circular dependencies
- No conflicts with enabled modules
3. File Structure
- Service providers exist and are valid
- Required directories present
Programmatic Validation
use Esegments\ModularArchitecture\Facades\Modular;
use Esegments\ModularArchitecture\Validation\ModuleValidator;
use Esegments\ModularArchitecture\Validation\DependencyValidator;
// Validate single module
$result = Modular::validate('Blog');
if (!$result->isValid()) {
foreach ($result->errors as $error) {
echo $error . "\n";
}
}
// Validate all
$result = Modular::validateAll();
// Validate per module
$results = Modular::validateAllPerModule();
foreach ($results as $moduleName => $result) {
if (!$result->isValid()) {
echo "{$moduleName}: " . implode(', ', $result->errors) . "\n";
}
}
ValidationResult Object
$result = Modular::validate('Blog');
// Check if valid
$result->isValid(): bool
// Get errors
$result->errors: array
// Merge with another result
$result->merge(ValidationResult $other): ValidationResult
Dependency Validation
use Esegments\ModularArchitecture\Validation\DependencyValidator;
$validator = app(DependencyValidator::class);
// Check if module can be enabled
$result = $validator->canEnable('Blog');
// Check if module can be disabled
$result = $validator->canDisable('Core');
// Check if module can be removed
$result = $validator->canRemove('Blog');
// Validate all dependencies
$result = $validator->validateAll($modules);
Common Validation Errors
Missing Dependency
Module [Blog] requires [Media] which is not installed.
Fix: Install the required module:
php artisan modular:install E-Segments/media-module
Version Mismatch
Module [Blog] requires [Core ^2.0] but [1.5.0] is installed.
Fix: Update the dependency:
php artisan modular:update Core
Circular Dependency
Circular dependency detected: A → B → C → A
Fix: Refactor module dependencies to break the cycle.
Conflict
Module [NewAuth] conflicts with enabled module [LegacyAuth].
Fix: Disable the conflicting module:
php artisan modular:disable LegacyAuth
Invalid Manifest
Module [Blog] has invalid module.json: Syntax error
Fix: Check JSON syntax in module.json.
Provider Not Found
Module [Blog] provider class [Modules\Blog\Providers\BlogServiceProvider] does not exist.
Fix: Create the missing provider or update module.json.
Health Checks
For deeper validation:
php artisan modular:health
Checks:
- Manifest validity
- Service provider validity
- Directory structure
- File permissions
- Dependency integrity
- Circular dependency detection
use Esegments\ModularArchitecture\Health\ModuleHealthChecker;
$checker = app(ModuleHealthChecker::class);
$report = $checker->check('Blog');
// Full health check all modules
$fullReport = $checker->checkAll();
CI/CD Integration
Add validation to your CI pipeline:
# .github/workflows/test.yml
- name: Validate Modules
run: php artisan modular:validate --strict
The --strict flag causes non-zero exit on any validation error.