1 | <?php |
||
18 | class ResolveValidator implements ResolveValidatorInterface |
||
19 | { |
||
20 | |||
21 | use ErrorContainerTrait; |
||
22 | |||
23 | /** |
||
24 | * @inheritdoc |
||
25 | */ |
||
26 | public function validateArguments($queryType, $query, $request) |
||
27 | { |
||
28 | 7 | $requiredArguments = array_filter($queryType->getConfig()->getArguments(), function (Field $argument) { |
|
29 | 3 | return $argument->getConfig()->get('required'); |
|
30 | 7 | }); |
|
31 | |||
32 | 7 | foreach ($query->getArguments() as $argument) { |
|
33 | 2 | if (!array_key_exists($argument->getName(), $queryType->getConfig()->getArguments())) { |
|
34 | $this->addError(new ResolveException(sprintf('Unknown argument "%s" on field "%s".', $argument->getName(), $queryType->getName()))); |
||
35 | |||
36 | return false; |
||
37 | } |
||
38 | |||
39 | /** @var AbstractType $argumentType */ |
||
40 | 2 | $argumentType = $queryType->getConfig()->getArgument($argument->getName())->getType(); |
|
41 | 2 | if ($argument->getValue() instanceof Variable) { |
|
42 | if ($request->hasVariable($argument->getName())) { |
||
43 | $argument->getValue()->setValue($request->getVariable($argument->getName())); |
||
44 | } else { |
||
45 | $this->addError(new ResolveException(sprintf('Variable "%s" not exist for query "%s"', $argument->getName(), $queryType->getName()))); |
||
46 | |||
47 | return false; |
||
48 | } |
||
49 | } |
||
50 | |||
51 | 2 | if (!$argumentType->isValidValue($argumentType->parseValue($argument->getValue()->getValue()))) { |
|
52 | $this->addError(new ResolveException(sprintf('Not valid type for argument "%s" in query "%s"', $argument->getName(), $queryType->getName()))); |
||
53 | |||
54 | return false; |
||
55 | } |
||
56 | |||
57 | 2 | if (array_key_exists($argument->getName(), $requiredArguments)) { |
|
58 | 2 | unset($requiredArguments[$argument->getName()]); |
|
59 | 2 | } |
|
60 | 7 | } |
|
61 | |||
62 | 7 | if (count($requiredArguments)) { |
|
63 | 1 | $this->addError(new ResolveException(sprintf('Require "%s" arguments to query "%s"', implode(', ', array_keys($requiredArguments)), $query->getName()))); |
|
64 | |||
65 | 1 | return false; |
|
66 | } |
||
67 | |||
68 | 6 | return true; |
|
69 | } |
||
70 | |||
71 | /** |
||
72 | * @inheritdoc |
||
73 | */ |
||
74 | 6 | public function validateResolvedValue($value, $kind) |
|
85 | |||
86 | } |