Exemplo n.º 1
0
 /**
  * Set the maximum reference depth
  * @param $depth
  */
 public function setMaxDepth($depth)
 {
     if (!is_numeric($depth)) {
         throw new \InvalidArgumentException('Expected depth to be numeric');
     }
     self::$maxDepth = $depth;
 }
Exemplo n.º 2
0
 /**
  * Resolves all $ref references for a given schema.  Recurses through
  * the object to resolve references of any child schemas.
  *
  * The 'format' property is omitted because it isn't required for
  * validation.  Theoretically, this class could be extended to look
  * for URIs in formats: "These custom formats MAY be expressed as
  * an URI, and this URI MAY reference a schema of that format."
  *
  * The 'id' property is not filled in, but that could be made to happen.
  *
  * @param object $schema    JSON Schema to flesh out
  * @param string $sourceUri URI where this schema was located
  */
 public function resolve($schema, $sourceUri = null)
 {
     if (self::$depth > self::$maxDepth) {
         self::$depth = 0;
         throw new JsonDecodingException(JSON_ERROR_DEPTH);
     }
     ++self::$depth;
     if (!is_object($schema)) {
         --self::$depth;
         return;
     }
     if (null === $sourceUri && !empty($schema->id)) {
         $sourceUri = $schema->id;
     }
     if (null === $this->rootSchema) {
         $this->rootSchema = $schema;
     }
     // Resolve $ref first
     $this->resolveRef($schema, $sourceUri);
     // These properties are just schemas
     // eg.  items can be a schema or an array of schemas
     foreach (array('additionalItems', 'additionalProperties', 'extends', 'items') as $propertyName) {
         $this->resolveProperty($schema, $propertyName, $sourceUri);
     }
     // These are all potentially arrays that contain schema objects
     // eg.  type can be a value or an array of values/schemas
     // eg.  items can be a schema or an array of schemas
     foreach (array('disallow', 'extends', 'items', 'type', 'allOf', 'anyOf', 'oneOf') as $propertyName) {
         $this->resolveArrayOfSchemas($schema, $propertyName, $sourceUri);
     }
     // These are all objects containing properties whose values are schemas
     foreach (array('dependencies', 'patternProperties', 'properties') as $propertyName) {
         $this->resolveObjectOfSchemas($schema, $propertyName, $sourceUri);
     }
     --self::$depth;
 }
Exemplo n.º 3
0
 public function setMaxDepth($maxDepth)
 {
     self::$maxDepth = $maxDepth;
 }