modifs.mineures sans commentaires
This commit is contained in:
		
							parent
							
								
									4353f482a4
								
							
						
					
					
						commit
						e592e8b9c4
					
				| @ -19,7 +19,7 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate { | ||||
|     $this->context->resetParams($params); | ||||
|   } | ||||
| 
 | ||||
|   protected function resetContext($resetSelectedKey): void { | ||||
|   protected function resetContext(bool $resetSelectedKey): void { | ||||
|     $context = $this->context; | ||||
|     $type = $context->schema->type; | ||||
|     if (is_array($type)) $type = $type[0]; | ||||
| @ -28,19 +28,16 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate { | ||||
|     $context->result->reset(); | ||||
|     $context->analyzed = false; | ||||
|     $context->normalized = false; | ||||
|     if ($resetSelectedKey) $context->selectedKey = null; | ||||
|   } | ||||
| 
 | ||||
|   protected function afterModify(?array $params, $resetSelectedKey=false): void { | ||||
|   protected function afterModify(?array $params, bool $resetSelectedKey=false): void { | ||||
|     $context = $this->context; | ||||
|     $this->resetContext($resetSelectedKey); | ||||
|     if ($params["analyze"] ?? $context->analyze) { | ||||
|       $this->analyze($params); | ||||
|     } | ||||
|     if ($context->analyzed) { | ||||
|       if ($params["normalize"] ?? $context->normalize) { | ||||
|         $this->normalize($params); | ||||
|       } | ||||
|     if ($context->analyzed && ($params["normalize"] ?? $context->normalize)) { | ||||
|       $this->normalize($params); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
| @ -80,6 +77,15 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate { | ||||
|   /** normaliser la valeur */ | ||||
|   abstract static function _normalize(WrapperContext $context, Wrapper $wrapper, ?array $params): bool; | ||||
| 
 | ||||
|   protected function checkResult(): void { | ||||
|     $context = $this->context; | ||||
|     /** @var ScalarResult $result */ | ||||
|     $result = $context->result; | ||||
|     if (!$result->valid) { | ||||
|       $result->throw($params["throw"] ?? $context->throw); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function normalize(?array $params=null): bool { | ||||
|     $context = $this->context; | ||||
| 
 | ||||
| @ -95,11 +101,7 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate { | ||||
|       $modified = false; | ||||
|     } | ||||
| 
 | ||||
|     /** @var ScalarResult $result */ | ||||
|     $result = $context->result; | ||||
|     if (!$result->valid) { | ||||
|       $result->throw($params["throw"] ?? $context->throw); | ||||
|     } | ||||
|     $this->checkResult(); | ||||
|     return $modified; | ||||
|   } | ||||
| 
 | ||||
| @ -115,7 +117,7 @@ abstract class Wrapper implements ArrayAccess, IteratorAggregate { | ||||
|    * @param string|int|null $key | ||||
|    * @return Wrapper $this | ||||
|    */ | ||||
|   abstract function select($key): Wrapper; | ||||
|   abstract function select($key=null): Wrapper; | ||||
| 
 | ||||
|   function getIterator() { | ||||
|     foreach ($this->getKeys() as $key) { | ||||
|  | ||||
| @ -37,8 +37,6 @@ class WrapperContext { | ||||
|   /** @var mixed */ | ||||
|   public $value = null; | ||||
| 
 | ||||
|   /** @var string|int|null clé sélectionnée */ | ||||
|   public $selectedKey = null; | ||||
|   /** type de la valeur de la clé sélectionnée après analyse */ | ||||
|   public ?IType $type = null; | ||||
|   /** résultat de l'analyse de la valeur de la clé sélectionnée */ | ||||
|  | ||||
| @ -14,23 +14,25 @@ use nulib\schema\WrapperContext; | ||||
| 
 | ||||
| class AssocWrapper extends Wrapper { | ||||
|   function __construct(AssocSchema $schema, &$value=null, $valueKey=null, ?array $params=null) { | ||||
|     $keys = $schema->getKeys(); | ||||
|     $keyParams = cl::merge($params, [ | ||||
|     $this->context = $context = new AssocWrapperContext($schema, null, null, $params); | ||||
|     $paramsNoThrow = cl::merge($params, [ | ||||
|       "throw" => false, | ||||
|     ]); | ||||
| 
 | ||||
|     $keys = $schema->getKeys(); | ||||
|     $keyWrappers = []; | ||||
|     foreach ($keys as $key) { | ||||
|       $value = null; | ||||
|       $keyWrappers[$key] = $schema->getSchema($key)->getWrapper($value, null, $keyParams); | ||||
|       $keyDummy = null; | ||||
|       $keyWrappers[$key] = $schema->getSchema($key)->getWrapper($keyDummy, null, $paramsNoThrow); | ||||
|     } | ||||
|     $this->context = $context = new AssocWrapperContext($schema, null, null, $params); | ||||
|     $arrayParams = cl::merge($params, [ | ||||
|       "throw" => false, | ||||
|     ]); | ||||
|     $context->arrayWrapper = new ScalarWrapper($schema, $dummy, null, $arrayParams, $context); | ||||
|     $context->keys = $keys; | ||||
|     $context->keyWrappers = $keyWrappers; | ||||
| 
 | ||||
|     $arrayDummy = null; | ||||
|     $context->arrayWrapper = new ScalarWrapper($schema, $arrayDummy, null, $paramsNoThrow, $context); | ||||
| 
 | ||||
|     $context->assocResult = new ScalarResult();#XX AssocResult
 | ||||
| 
 | ||||
|     if ($value !== null) { | ||||
|       # n'initialiser que si $value n'est pas null
 | ||||
|       $this->reset($value, $valueKey); | ||||
| @ -40,13 +42,14 @@ class AssocWrapper extends Wrapper { | ||||
|   /** @var AssocWrapperContext  */ | ||||
|   protected WrapperContext $context; | ||||
| 
 | ||||
|   protected function resetContext($resetSelectedKey): void { | ||||
|   protected function resetContext(bool $resetSelectedKey): void { | ||||
|     parent::resetContext($resetSelectedKey); | ||||
|     $context = $this->context; | ||||
|     $context->arrayWrapper->getResult()->reset(); | ||||
|     foreach ($context->keyWrappers as $wrapper) { | ||||
|       $wrapper->getResult()->reset(); | ||||
|     } | ||||
|     if ($resetSelectedKey) $context->selectedKey = null; | ||||
|   } | ||||
| 
 | ||||
|   function reset(&$value, $valueKey=null, ?array $params=null): Wrapper { | ||||
| @ -69,7 +72,7 @@ class AssocWrapper extends Wrapper { | ||||
| 
 | ||||
|   protected function _getWrapper($key): Wrapper { | ||||
|     $context = $this->context; | ||||
|     if ($key === null) return $context->arrayWrapper; | ||||
|     if ($key === null || $key === "") return $context->arrayWrapper; | ||||
|     $wrapper = $context->keyWrappers[$key] ?? null; | ||||
|     if ($wrapper === null) throw ValueException::invalid_key($key); | ||||
|     return $wrapper; | ||||
| @ -99,9 +102,10 @@ class AssocWrapper extends Wrapper { | ||||
| 
 | ||||
|     $what = ScalarWrapper::_analyze($context, $wrapper, $params); | ||||
|     /** @var ScalarResult $result */ | ||||
|     $result = $context->result; | ||||
|     if (!$result->valid) return $what; | ||||
|     if (!$context->result->valid) return $what; | ||||
| 
 | ||||
|     $result = $context->assocResult; | ||||
|     $result->setValid(); | ||||
|     foreach ($context->keyWrappers as $keyWrapper) { | ||||
|       $keyWrapper->analyze($params); | ||||
|       if ($keyWrapper->isValid()) continue; | ||||
| @ -155,7 +159,17 @@ class AssocWrapper extends Wrapper { | ||||
|     return $modified; | ||||
|   } | ||||
| 
 | ||||
|   protected function checkResult(): void { | ||||
|     $context = $this->context; | ||||
|     /** @var ScalarResult $result */ | ||||
|     $result = $context->assocResult; | ||||
|     if (!$result->valid) { | ||||
|       $result->throw($params["throw"] ?? $context->throw); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   function getResult($key=false): Result { | ||||
|     if ($key === null) return $this->context->assocResult; | ||||
|     if ($key === false) $key = $this->context->selectedKey; | ||||
|     return $this->_getWrapper($key)->getResult(); | ||||
|   } | ||||
|  | ||||
| @ -2,6 +2,7 @@ | ||||
| namespace nulib\schema\_assoc; | ||||
| 
 | ||||
| use nulib\ref\schema\ref_schema; | ||||
| use nulib\schema\_scalar\ScalarResult; | ||||
| use nulib\schema\_scalar\ScalarWrapper; | ||||
| use nulib\schema\Wrapper; | ||||
| use nulib\schema\WrapperContext; | ||||
| @ -28,4 +29,9 @@ class AssocWrapperContext extends WrapperContext { | ||||
| 
 | ||||
|   /** @var Wrapper[] */ | ||||
|   public array $keyWrappers; | ||||
| 
 | ||||
|   public ScalarResult $assocResult; | ||||
| 
 | ||||
|   /** @var string|int|null clé sélectionnée */ | ||||
|   public $selectedKey = null; | ||||
| } | ||||
|  | ||||
| @ -40,9 +40,9 @@ class ScalarWrapper extends Wrapper { | ||||
|   } | ||||
| 
 | ||||
|   /** @param string|int|null $key */ | ||||
|   function select($key): ScalarWrapper { | ||||
|     if ($key !== null) throw ValueException::invalid_key($key); | ||||
|     return $this; | ||||
|   function select($key=null): ScalarWrapper { | ||||
|     if ($key === null || $key === "") return $this; | ||||
|     throw ValueException::invalid_key($key); | ||||
|   } | ||||
| 
 | ||||
|   /** analyser la valeur et résoudre son type */ | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user