mirror of
https://github.com/justinrainbow/json-schema.git
synced 2025-03-19 05:40:02 +01:00
added the possibility of arrays (associative) be validated ok against object declarations when using cast_type_mode
git-svn-id: https://jsonschemaphpv.svn.sourceforge.net/svnroot/jsonschemaphpv/trunk@5 14558f9d-7ea9-46ec-92da-52a2cad6a683
This commit is contained in:
parent
5d84741a6f
commit
ee4b0ff6b9
@ -56,6 +56,9 @@ class JsonSchema {
|
||||
* @return unknown
|
||||
*/
|
||||
static public function validate($instance, $schema = null, $formatValidator = null) {
|
||||
self::$errors = array();
|
||||
self::$formatValidator = null;
|
||||
|
||||
if($formatValidator) self::$formatValidator = $formatValidator;
|
||||
$res = self::_validate($instance,$schema,false);
|
||||
self::$formatValidator = null;
|
||||
@ -146,6 +149,7 @@ class JsonSchema {
|
||||
}
|
||||
|
||||
static function checkProp($value, $schema, $path, $i = '', $_changing = false) {
|
||||
Dbg::func(1,3);
|
||||
if (!is_object($schema)) {
|
||||
return;
|
||||
}
|
||||
@ -199,10 +203,23 @@ class JsonSchema {
|
||||
}
|
||||
//verify the itens on an array and min and max number of items.
|
||||
if(is_array($value)) {
|
||||
if(
|
||||
self::$checkMode == self::CHECK_MODE_TYPE_CAST &&
|
||||
$schema->type == 'object'
|
||||
) {
|
||||
self::checkObj(
|
||||
$value,
|
||||
$schema->properties,
|
||||
$path,
|
||||
isset($schema->additionalProperties) ? $schema->additionalProperties : null,
|
||||
$_changing
|
||||
);
|
||||
}
|
||||
self::checkArray($value,$schema,$path,$i,$_changing);
|
||||
}
|
||||
############ verificar!
|
||||
elseif(isset($schema->properties) && is_object($value)) {
|
||||
Dbg::mark('calling checkObj');
|
||||
self::checkObj(
|
||||
$value,
|
||||
$schema->properties,
|
||||
@ -294,7 +311,12 @@ class JsonSchema {
|
||||
&& $type == 'integer'
|
||||
) {
|
||||
$wrongType = !self::checkTypeCast($type,$value);
|
||||
} elseif($type !== gettype($value)) {
|
||||
} elseif (
|
||||
self::$checkMode == self::CHECK_MODE_TYPE_CAST
|
||||
&& $type == 'object' && is_array($value)
|
||||
) {
|
||||
$wrongType = false;
|
||||
} elseif ($type !== gettype($value)) {
|
||||
$wrongType = true;
|
||||
}
|
||||
}
|
||||
@ -361,7 +383,7 @@ class JsonSchema {
|
||||
|
||||
static function checkObj($instance, $objTypeDef, $path, $additionalProp,$_changing) {
|
||||
if($objTypeDef instanceOf StdClass) {
|
||||
if( ! ($instance instanceOf StdClass) || is_array($instance) ) {
|
||||
if( ! (($instance instanceOf StdClass) || is_array($instance)) ) {
|
||||
self::$errors[] = array(
|
||||
'property'=>$path,
|
||||
'message'=>"an object is required"
|
||||
@ -370,7 +392,7 @@ class JsonSchema {
|
||||
foreach($objTypeDef as $i=>$value) {
|
||||
$value =
|
||||
array_key_exists($i,$instance) ?
|
||||
$instance->$i :
|
||||
(is_array($instance) ? $instance[$i] : $instance->$i) :
|
||||
new JsonSchemaUndefined();
|
||||
$propDef = $objTypeDef->$i;
|
||||
self::checkProp($value,$propDef,$path,$i,$_changing);
|
||||
@ -395,7 +417,7 @@ class JsonSchema {
|
||||
);
|
||||
}
|
||||
}
|
||||
$value = $instance->$i;
|
||||
$value = is_array($instance) ? $instance[$i] : $instance->$i;
|
||||
|
||||
// To verify additional properties types.
|
||||
if ($objTypeDef && is_object($objTypeDef) && !isset($objTypeDef->$i)) {
|
||||
@ -418,6 +440,10 @@ class Dbg {
|
||||
|
||||
static public $quietMode = false;
|
||||
|
||||
static function includeJqueryJs() {
|
||||
echo "<script type='text/javascript' src='/js/jquery.js'></script>";
|
||||
}
|
||||
|
||||
static function func($print = true, $numStackSteps = 1) {
|
||||
$ar = debug_backtrace();
|
||||
$ret = '';
|
||||
@ -440,7 +466,7 @@ class Dbg {
|
||||
return $ret;
|
||||
}
|
||||
|
||||
static function object($object,$linkTitle,$varDump = false,$print = true) {
|
||||
static function object($object,$linkTitle = 'object',$varDump = false,$print = true) {
|
||||
static $divCount = 0;
|
||||
$divCount++;
|
||||
$ar = debug_backtrace();
|
||||
|
Loading…
x
Reference in New Issue
Block a user