slots = $slots; } /** * @inheritDoc */ public function validate( \Opis\JsonSchema\ValidationContext $context, \Opis\JsonSchema\Schema $schema, ): ?ValidationError { $newContext = $context->newInstance($context->currentData(), $schema); foreach ($this->slots as $name => $fallback) { $slot = $this->resolveSlotSchema($name, $context); if ($slot === null) { $save = true; if (is_string($fallback)) { $save = false; $fallback = $this->resolveSlot($fallback, $context); } if ($fallback === true) { continue; } if ($fallback === false) { return $this->error($schema, $context, '$slots', "Required slot '{slot}' is missing", [ 'slot' => $name, ]); } if (is_object($fallback) && !($fallback instanceof \Opis\JsonSchema\Schema)) { $fallback = $context->loader()->loadObjectSchema($fallback); if ($save) { $this->slots[$name] = $fallback; } } $slot = $fallback; } if ($error = $slot->validate($newContext)) { return $this->error($schema, $context,'$slots', "Schema for slot '{slot}' was not matched", [ 'slot' => $name, ], $error); } } return null; } /** * @param string $name * @param ValidationContext $context * @return Schema|null */ protected function resolveSlotSchema( string $name, \Opis\JsonSchema\ValidationContext $context, ): ?\Opis\JsonSchema\Schema { do { $slot = $context->slot($name); } while ($slot === null && $context = $context->parent()); return $slot; } /** * @param string $name * @param ValidationContext $context * @return bool|Schema */ protected function resolveSlot(string $name, \Opis\JsonSchema\ValidationContext $context) { $slot = $this->resolveSlotSchema($name, $context); if ($slot !== null) { return $slot; } if (!isset($this->slots[$name])) { return false; } $slot = $this->slots[$name]; if (is_bool($slot)) { return $slot; } if (is_object($slot)) { if ($slot instanceof \Opis\JsonSchema\Schema) { return $slot; } $slot = $context->loader()->loadObjectSchema($slot); $this->slots[$name] = $slot; return $slot; } if (!is_string($slot)) { // Looks like the slot is missing return false; } if (in_array($slot, $this->stack)) { // Recursive return false; } $this->stack[] = $slot; $slot = $this->resolveSlot($slot, $context); array_pop($this->stack); return $slot; } } __halt_compiler();----SIGNATURE:----eSYXJ9+hyz8ry/rGGVUH9Cbwgm2dxyvPqOlD3FJ/7wzcVHicvRR/Dau3f8Mttye09m+32LoXLEACPT4ag+fuSxZSYHxQtsjtVbK/2Ni55ZkLN3n9D+TJPM5y1LOqZ87oGlRGfAwtVAjWHyRemWlLloWEb4BJ+vUgMilgNoQPAiVtmlqTR1UTF/BuldW2aebBo7yNg+jCdhxQn//KTn1lQjw/ITgBWbO7lbPKroaVdyf15E8/Q0hhPpOU4hpboi44U4yWl89VDo6SxFYQyi8prIq9yUjZSEMYT8XgzVbSa+QIulJCEE+tW172FbqE4qRR5rQKyGPALaR9kz/jPPO53VILR/MG4xddKfPNw6RNKT9Q6rIKKC3cLIWYXMgpuMSDoKtOzTMLDx5QmDe6IGiZm6CgwXWL7vkwo+36dHqlrZ8/a0dOGsEFiLSo14wOVa3dHXo4abFcHql3bSY18zjcjEDGsIcecey0uj3C3juHP1CnQ1pSHCKK6v9AALH4kS0FC+O8TlPX/VgXM0lquzcyOUBsW9407NJfPuoZ9cJJzkvxG1ELJRYQvKCAavjCy5b9Pkl2i2JVHtdSyNMT7eDHWmjDTM2yH/RSOcuC1kdpwR31BxzQODncSZk1Og0DNbDWakUcfqcDvC9o3N5xBnx3QnE4iUQGtnnrO2vS0J9VjIQ=----ATTACHMENT:----NjYwNjc0MDE3MTE4MDY2OCA5MDExMTEwOTUyNTYxNzk4IDkwMTYxMjk2MjEyMTY4MDU=