Skip to content

Commit 4597e74

Browse files
committed
Fix Format validator
1 parent 5227cf5 commit 4597e74

File tree

6 files changed

+47
-2
lines changed

6 files changed

+47
-2
lines changed

src/DependencyInjection/Compiler/FormatValidatorPass.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ class FormatValidatorPass implements CompilerPassInterface
1313
*/
1414
public function process(ContainerBuilder $container)
1515
{
16+
$constraintFactoryDefinition = $container->getDefinition('swagger.json_schema.constraints.factory');
1617
$formatConstraintDefinition = $container->getDefinition('swagger.json_schema.constraints.format');
1718

1819
$services = $container->findTaggedServiceIds('swagger.format_validator');
1920
foreach ($services as $serviceId => $tags) {
2021
foreach ($tags as $attributes) {
2122
$formatConstraintDefinition->addMethodCall('addFormatValidator', [$attributes['format'], new Reference($serviceId)]);
23+
$constraintFactoryDefinition->addMethodCall('setFormatValidator', [$attributes['format'], new Reference($serviceId)]);
2224
}
2325
}
2426
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<?php
2+
3+
namespace Nicofuma\SwaggerBundle\JsonSchema\Constraints;
4+
5+
class Factory extends \JsonSchema\Constraints\Factory
6+
{
7+
/** @var Format\FormatValidatorInterface[] */
8+
private $formatValidators;
9+
10+
/**
11+
* Add a format validator.
12+
*
13+
* @param string $format
14+
* @param Format\FormatValidatorInterface $validator
15+
*/
16+
public function setFormatValidator($format, Format\FormatValidatorInterface $validator)
17+
{
18+
$this->formatValidators[$format] = $validator;
19+
}
20+
21+
/**
22+
* @return Format\FormatValidatorInterface[]
23+
*/
24+
public function getFormatValidators()
25+
{
26+
return $this->formatValidators;
27+
}
28+
}

src/JsonSchema/Constraints/FormatConstraint.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
namespace Nicofuma\SwaggerBundle\JsonSchema\Constraints;
44

5+
use JsonSchema\Constraints\Factory;
56
use JsonSchema\Constraints\FormatConstraint as FormatConstraintBase;
7+
use JsonSchema\Uri\UriRetriever;
68
use Nicofuma\SwaggerBundle\Exception\FormatConstraintException;
79
use Nicofuma\SwaggerBundle\JsonSchema\Constraints\Format\FormatValidatorInterface;
810

@@ -11,6 +13,15 @@ class FormatConstraint extends FormatConstraintBase
1113
/** @var FormatValidatorInterface[] */
1214
private $formatMap = [];
1315

16+
public function __construct($checkMode, UriRetriever $uriRetriever, Factory $factory)
17+
{
18+
parent::__construct($checkMode, $uriRetriever, $factory);
19+
20+
if ($factory instanceof \Nicofuma\SwaggerBundle\JsonSchema\Constraints\Factory) {
21+
$this->formatMap = $factory->getFormatValidators();
22+
}
23+
}
24+
1425
/**
1526
* {@inheritdoc}
1627
*/

src/NicofumaSwaggerBundle.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
namespace Nicofuma\SwaggerBundle;
44

5+
use Nicofuma\SwaggerBundle\DependencyInjection\Compiler\FormatValidatorPass;
56
use Nicofuma\SwaggerBundle\DependencyInjection\Compiler\FOSRestPass;
7+
use Nicofuma\SwaggerBundle\DependencyInjection\Compiler\JsonSchemaConstraintPass;
68
use Symfony\Component\DependencyInjection\ContainerBuilder;
79
use Symfony\Component\HttpKernel\Bundle\Bundle;
810

@@ -11,5 +13,7 @@ class NicofumaSwaggerBundle extends Bundle
1113
public function build(ContainerBuilder $container)
1214
{
1315
$container->addCompilerPass(new FOSRestPass());
16+
$container->addCompilerPass(new FormatValidatorPass());
17+
$container->addCompilerPass(new JsonSchemaConstraintPass());
1418
}
1519
}

src/Resources/config/services.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ services:
4040
- '@request_stack'
4141

4242
swagger.json_schema.constraints.factory:
43-
class: JsonSchema\Constraints\Factory
43+
class: Nicofuma\SwaggerBundle\JsonSchema\Constraints\Factory
4444

4545
# Override the JsonSchema's format constraint
4646
swagger.json_schema.constraints.format:

src/Validator/Validator.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,6 @@ public function getSchemaManager()
5151
*/
5252
protected function getValidator()
5353
{
54-
return new \JsonSchema\Validator($this->constraintsFactory);
54+
return new \JsonSchema\Validator(\JsonSchema\Validator::CHECK_MODE_NORMAL, null, $this->constraintsFactory);
5555
}
5656
}

0 commit comments

Comments
 (0)