@@ -793,33 +793,89 @@ final class ContactInfo
793793
794794## Configuration Options
795795
796- You can configure the generator behavior using the ` GeneratorConfig ` class:
796+ You can configure the generator behavior using the ` GeneratorConfig ` class and custom property data extractors :
797797
798798``` php
799799use Spiral\JsonSchemaGenerator\Generator;
800800use Spiral\JsonSchemaGenerator\GeneratorConfig;
801+ use Spiral\JsonSchemaGenerator\Validation\AttributeConstraintExtractor;
802+ use Spiral\JsonSchemaGenerator\Validation\PhpDocValidationConstraintExtractor;
803+ use Spiral\JsonSchemaGenerator\Validation\CompositePropertyDataExtractor;
801804
802- // Enable validation constraints (default: true)
805+ // Basic configuration - enable/disable validation constraints
803806$config = new GeneratorConfig(enableValidationConstraints: true);
804807$generator = new Generator(config: $config);
805808
806- // Disable validation constraints for performance
807- $config = new GeneratorConfig(enableValidationConstraints: false);
808- $generator = new Generator(config: $config);
809+ // Advanced configuration - custom property data extractors
810+ $compositeExtractor = new CompositePropertyDataExtractor([
811+ new PhpDocValidationConstraintExtractor(),
812+ new AttributeConstraintExtractor(),
813+ ]);
814+
815+ $generator = new Generator(propertyDataExtractor: $compositeExtractor);
816+
817+ // Use default extractors (recommended for most cases)
818+ $generator = new Generator(propertyDataExtractor: CompositePropertyDataExtractor::createDefault());
809819```
810820
811- ### Configuration Options
821+ #### Property Data Extractors
822+
823+ The generator uses a modular property data extractor system that allows you to customize how validation constraints are extracted from properties:
824+
825+ ** Available Extractors:**
826+
827+ - ` PhpDocValidationConstraintExtractor ` - Extracts constraints from PHPDoc comments
828+ - ` AttributeConstraintExtractor ` - Extracts constraints from PHP attributes
829+ - ` CompositePropertyDataExtractor ` - Combines multiple extractors
812830
813- - ` enableValidationConstraints ` (bool, default: true) - Enable/disable PHPDoc validation constraint extraction
831+ ** Usage Examples:**
832+
833+ ``` php
834+ // Use only PHPDoc constraints
835+ $generator = new Generator(propertyDataExtractor: new CompositePropertyDataExtractor([
836+ new PhpDocValidationConstraintExtractor(),
837+ ]));
838+
839+ // Use only attribute constraints
840+ $generator = new Generator(propertyDataExtractor: new CompositePropertyDataExtractor([
841+ new AttributeConstraintExtractor(),
842+ ]));
843+
844+ // Use both (default behavior)
845+ $generator = new Generator(propertyDataExtractor: CompositePropertyDataExtractor::createDefault());
846+
847+ // Disable all validation constraints for performance
848+ $generator = new Generator(propertyDataExtractor: new CompositePropertyDataExtractor([]));
849+ ```
814850
815- When ` enableValidationConstraints ` is disabled, the generator will skip parsing PHPDoc comments for validation rules,
816- which can improve performance for large schemas where validation constraints are not needed.
851+ ### Custom Property Data Extractors
817852
818- ## Integration with Valinor
853+ You can create custom property data extractors by implementing the ` PropertyDataExtractorInterface ` :
854+
855+ ``` php
856+ use Spiral\JsonSchemaGenerator\Validation\PropertyDataExtractorInterface;
857+ use Spiral\JsonSchemaGenerator\Parser\PropertyInterface;
858+ use Spiral\JsonSchemaGenerator\Schema\Type;
859+
860+ class CustomConstraintExtractor implements PropertyDataExtractorInterface
861+ {
862+ public function extractValidationRules(PropertyInterface $property, Type $jsonSchemaType): array
863+ {
864+ $rules = [];
865+
866+ // Your custom constraint extraction logic here
867+ // For example, extract constraints from custom attributes or naming conventions
868+
869+ return $rules;
870+ }
871+ }
872+
873+ // Use your custom extractor
874+ $generator = new Generator(
875+ propertyDataExtractor: CompositePropertyDataExtractor::createDefault()
876+ ->withExtractor(new CustomConstraintExtractor())
877+ );
819878
820- The JSON Schema Generator works perfectly with the [ Valinor PHP package] ( https://github.com/CuyZ/Valinor ) for complete
821- data mapping and validation workflows. Valinor can validate incoming data based on the same PHPDoc constraints that the
822- generator uses to create JSON schemas.
823879
824880### Installation
825881
0 commit comments