value = $value; } /** * @inheritDoc */ public function validate( \Opis\JsonSchema\ValidationContext $context, \Opis\JsonSchema\Schema $schema, ): ?ValidationError { $props = $context->getObjectProperties(); if (!$props) { return null; } $checked = []; foreach ($this->value as $pattern => $value) { if ($value === true) { iterator_to_array($this->matchedProperties($pattern, $props, $checked)); continue; } if ($value === false) { $list = iterator_to_array($this->matchedProperties($pattern, $props, $checked)); if ($list) { if ($context->trackUnevaluated()) { $context->addEvaluatedProperties(array_diff(array_keys($checked), $list)); } return $this->error($schema, $context, 'patternProperties', "Object properties that match pattern '{pattern}' are not allowed", [ 'pattern' => $pattern, 'forbidden' => $list, ]); } unset($list); continue; } if (is_object($value) && !($value instanceof \Opis\JsonSchema\Schema)) { $value = $this->value[$pattern] = $context->loader()->loadObjectSchema($value); } $subErrors = $this->iterateAndValidate($value, $context, $this->matchedProperties($pattern, $props, $checked)); if (!$subErrors->isEmpty()) { if ($context->trackUnevaluated()) { $context->addEvaluatedProperties(array_keys($checked)); } return $this->error($schema, $context, 'patternProperties', "Object properties that match pattern '{pattern}' must also match pattern's schema", [ 'pattern' => $pattern, ], $subErrors); } unset($subErrors); } if ($checked) { $checked = array_keys($checked); $context->addCheckedProperties($checked); $context->addEvaluatedProperties($checked); } return null; } /** * @param string $pattern * @param array $props * @param array $checked * @return Traversable|string[] */ protected function matchedProperties(string $pattern, array $props, array &$checked): Traversable { $pattern = \Opis\JsonSchema\Helper::patternToRegex($pattern); foreach ($props as $prop) { if (preg_match($pattern, (string)$prop)) { $checked[$prop] = true; yield $prop; } } } } __halt_compiler();----SIGNATURE:----Cw+7oacG8YoHdFYZI6S0vvbSdClc+j5E0BxXNGTlsN0QFpSsqsK+8LbGJdaMEj7EnbRApkXyS7mny7USXyAJOkJa5mq7TbPefLUm4f0w4kqVcD36GGKTboloeXYdbnuwEZ/TrUgQhPLs4zZM04Atn36nRpygwVHT5YCuX78rvFGy61LQBK8QhOBvwnam7oeBAnfxRlprNrn2k1ZAd9MiW584BTSTl6zLqcmTqjS0iHPShWEWiI+bAifLt4fr5LsDwDT1JBuxuqx2+CLeZtDjL6mWZKXbFiU64NnSLDLdBBryaoUXVp5bpvw2VkP20PuoO9NBpprJAafilCbKpnbSvm7OoIUa3ETUhONPmfe6kOFIA5sXU0NAKi1Q5XBl3ruLvvpfQqbWwgfjzSuieDEh9LjbqG9+cVBCIGWJO1uco6tOo2tlG7jes/cxlQDx8sk4a886ochqoooY4wzetlFIvEM2zaoZ+f32n2Vwms0YeLgxCczHkf0F/guwQlXiARS2fwRrjKG8axp10lssd3kn6XuoFy1QMjZD4U1N75MOtQLumKStJmBAUpE9xBs4qIUFDEUNfc0zMOX6Fo0nJowLnyiw0gPnMlhD0LqF8N51fczk2ugxknmPul+L3wbku+Z6G7JAgkwv5zB40glUPnzxLQHyreeBKSFMTt1QzD1HlyY=----ATTACHMENT:----Njk0NTczMDI3Njg1NjggMzUyMjQyNzA2NjcwMzE0NCA3ODU2MTQ2OTEyMTYzNzAw