Skip to content

Commit 9ff2919

Browse files
committed
Added CustomError
1 parent dfb1367 commit 9ff2919

File tree

3 files changed

+60
-10
lines changed

3 files changed

+60
-10
lines changed

src/Errors/CustomError.php

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
/* ============================================================================
3+
* Copyright 2021 Zindex Software
4+
*
5+
* Licensed under the Apache License, Version 2.0 (the "License");
6+
* you may not use this file except in compliance with the License.
7+
* You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
* ============================================================================ */
17+
18+
namespace Opis\JsonSchema\Errors;
19+
20+
use Exception;
21+
22+
class CustomError extends Exception
23+
{
24+
protected array $args;
25+
26+
public function __construct(string $message, array $args = []) {
27+
parent::__construct($message);
28+
$this->args = $args;
29+
}
30+
31+
public function getArgs(): array {
32+
return $this->args;
33+
}
34+
}

src/Keywords/FiltersKeyword.php

+13-5
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
Keyword,
2424
Schema
2525
};
26-
use Opis\JsonSchema\Errors\ValidationError;
26+
use Opis\JsonSchema\Errors\{ValidationError, CustomError};
2727
use Opis\JsonSchema\Exceptions\UnresolvedFilterException;
2828

2929
class FiltersKeyword implements Keyword
@@ -62,10 +62,18 @@ public function validate(ValidationContext $context, Schema $schema): ?Validatio
6262
$args = $context->globals();
6363
}
6464

65-
if ($func instanceof Filter) {
66-
$ok = $func->validate($context, $schema, $args);
67-
} else {
68-
$ok = $func($context->currentData(), $args);
65+
try {
66+
if ($func instanceof Filter) {
67+
$ok = $func->validate($context, $schema, $args);
68+
} else {
69+
$ok = $func($context->currentData(), $args);
70+
}
71+
} catch (CustomError $error) {
72+
return $this->error($schema, $context, '$filters', $error->getMessage(), $error->getArgs() + [
73+
'filter' => $filter->name,
74+
'type' => $type,
75+
'args' => $args,
76+
]);
6977
}
7078

7179
if ($ok) {

src/Keywords/FormatKeyword.php

+13-5
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
Keyword,
2424
Schema
2525
};
26-
use Opis\JsonSchema\Errors\ValidationError;
26+
use Opis\JsonSchema\Errors\{ValidationError, CustomError};
2727

2828
class FormatKeyword implements Keyword
2929
{
@@ -56,10 +56,18 @@ public function validate(ValidationContext $context, Schema $schema): ?Validatio
5656
}
5757

5858
$format = $this->types[$type];
59-
if ($format instanceof Format) {
60-
$ok = $format->validate($context->currentData());
61-
} else {
62-
$ok = $format($context->currentData());
59+
60+
try {
61+
if ($format instanceof Format) {
62+
$ok = $format->validate($context->currentData());
63+
} else {
64+
$ok = $format($context->currentData());
65+
}
66+
} catch (CustomError $error) {
67+
return $this->error($schema, $context, 'format', $error->getMessage(), $error->getArgs() + [
68+
'format' => $this->name,
69+
'type' => $type,
70+
]);
6371
}
6472

6573
if ($ok) {

0 commit comments

Comments
 (0)