Skip to content

Commit c6ca3e7

Browse files
committed
update readme
1 parent 2479f1c commit c6ca3e7

File tree

4 files changed

+73
-17
lines changed

4 files changed

+73
-17
lines changed

README.md

Lines changed: 69 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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
799799
use Spiral\JsonSchemaGenerator\Generator;
800800
use 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

src/Validation/CompositePropertyDataExtractor.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public function __construct(
2222
public static function createDefault(): self
2323
{
2424
return new self([
25-
new ValidationConstraintExtractor(),
25+
new PhpDocValidationConstraintExtractor(),
2626
new AttributeConstraintExtractor(),
2727
]);
2828
}

src/Validation/ValidationConstraintExtractor.php renamed to src/Validation/PhpDocValidationConstraintExtractor.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use Spiral\JsonSchemaGenerator\Parser\PropertyInterface;
88
use Spiral\JsonSchemaGenerator\Schema\Type;
99

10-
final readonly class ValidationConstraintExtractor implements PropertyDataExtractorInterface
10+
final readonly class PhpDocValidationConstraintExtractor implements PropertyDataExtractorInterface
1111
{
1212
public function __construct(
1313
private DocBlockParser $docBlockParser = new DocBlockParser(),

tests/Unit/GeneratorPropertyExtractorsTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
use Spiral\JsonSchemaGenerator\Tests\Unit\Fixture\ValidatedUser;
1111
use Spiral\JsonSchemaGenerator\Validation\AttributeConstraintExtractor;
1212
use Spiral\JsonSchemaGenerator\Validation\CompositePropertyDataExtractor;
13-
use Spiral\JsonSchemaGenerator\Validation\ValidationConstraintExtractor;
13+
use Spiral\JsonSchemaGenerator\Validation\PhpDocValidationConstraintExtractor;
1414

1515
final class GeneratorPropertyExtractorsTest extends TestCase
1616
{
@@ -34,7 +34,7 @@ public function testCreateDefault(): void
3434
public function testCreateWithValidationOnly(): void
3535
{
3636
$generator = new Generator(propertyDataExtractor: new CompositePropertyDataExtractor([
37-
new ValidationConstraintExtractor(),
37+
new PhpDocValidationConstraintExtractor(),
3838
]));
3939
$schema = $generator->generate(ValidatedUser::class);
4040
$result = $schema->jsonSerialize();

0 commit comments

Comments
 (0)