Skip to content

Commit

Permalink
Use annotations reader from DI instead of creating new one
Browse files Browse the repository at this point in the history
  • Loading branch information
mabar committed Jul 28, 2018
1 parent 681bb3a commit 876e76e
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 9 deletions.
9 changes: 8 additions & 1 deletion .docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,14 @@ api:
validator: Apitte\Core\Mapping\Validator\BasicValidator

# Symfony/Validator
validator: Apitte\Core\Mapping\Validator\SymfonyValidator
validator: Apitte\Core\Mapping\Validator\SymfonyValidator(@phpdoc.reader)
```

If you want use SymfonyValidator so also register PhpdocExtension

```yaml
extensions:
phpdoc: Contributte\PhpDoc\DI\PhpDocExtension
```

Your entity could looks like this.
Expand Down
19 changes: 11 additions & 8 deletions src/Mapping/Validator/SymfonyValidator.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,28 +4,31 @@

use Apitte\Core\Exception\Api\ValidationException;
use Doctrine\Common\Annotations\AnnotationReader;
use Doctrine\Common\Annotations\AnnotationRegistry;
use Doctrine\Common\Annotations\CachedReader;
use Doctrine\Common\Cache\ArrayCache;
use Doctrine\Common\Annotations\Reader;
use Symfony\Component\Validator\ConstraintViolationInterface;
use Symfony\Component\Validator\Validation;

class SymfonyValidator implements IEntityValidator
{

/** @var Reader */
private $reader;

public function __construct(Reader $reader)
{
$this->reader = $reader;
AnnotationReader::addGlobalIgnoredName('mapping');
}

/**
* @param object $entity
* @throws ValidationException
* @phpcsSuppress SlevomatCodingStandard.TypeHints.TypeHintDeclaration.MissingParameterTypeHint
*/
public function validate($entity): void
{
AnnotationRegistry::registerLoader('class_exists');
AnnotationReader::addGlobalIgnoredName('mapping');
$annotationReader = new CachedReader(new AnnotationReader(), new ArrayCache());

$validator = Validation::createValidatorBuilder()
->enableAnnotationMapping($annotationReader)
->enableAnnotationMapping($this->reader)
->getValidator();

/** @var ConstraintViolationInterface[] $violations */
Expand Down

0 comments on commit 876e76e

Please sign in to comment.