Exemple #1
0
 public function testFactoryGenericWithData()
 {
     CM_Config::get()->CM_Model_Abstract->types[CM_ModelMock::getTypeStatic()] = 'CM_ModelMock';
     $modelMock1 = CM_ModelMock::createStatic(array('foo' => 'bar'));
     /** @var CM_ModelMock $modelMock2 */
     $modelMock2 = CM_Model_Abstract::factoryGeneric(CM_ModelMock::getTypeStatic(), $modelMock1->getIdRaw(), array('foo' => 'bla'));
     $this->assertSame('bla', $modelMock2->getFoo());
 }
Exemple #2
0
 /**
  * @param string $key
  * @param mixed $value
  * @return mixed
  * @throws CM_Exception_Invalid
  * @throws CM_Model_Exception_Validation
  */
 public function decodeField($key, $value)
 {
     $key = (string) $key;
     if ($this->hasField($key)) {
         $schemaField = $this->_schema[$key];
         if (null !== $value) {
             $type = isset($schemaField['type']) ? $schemaField['type'] : null;
             if (null !== $type) {
                 switch ($type) {
                     case 'integer':
                     case 'int':
                         $value = (int) $value;
                         break;
                     case 'float':
                         $value = (double) $value;
                         break;
                     case 'string':
                         break;
                     case 'boolean':
                     case 'bool':
                         $value = (bool) $value;
                         break;
                     case 'array':
                         break;
                     case 'DateTime':
                         $value = DateTime::createFromFormat('U', $value);
                         break;
                     default:
                         $id = CM_Params::jsonDecode($value);
                         if (!is_array($id)) {
                             $id = array('id' => $id);
                         }
                         $value = CM_Model_Abstract::factoryGeneric($type::getTypeStatic(), $id);
                 }
             }
         }
     }
     return $value;
 }
Exemple #3
0
 /**
  * @param CM_Model_Abstract $model
  */
 public static function reinstantiateModel(CM_Model_Abstract &$model)
 {
     $model = CM_Model_Abstract::factoryGeneric($model->getType(), $model->getIdRaw());
 }
Exemple #4
0
 /**
  * @param string $key
  * @param mixed  $value
  * @return mixed
  * @throws CM_Exception_Invalid
  * @throws CM_Model_Exception_Validation
  */
 public function decodeField($key, $value)
 {
     $key = (string) $key;
     if ($this->hasField($key)) {
         $schemaField = $this->_schema[$key];
         if (null !== $value) {
             $type = isset($schemaField['type']) ? $schemaField['type'] : null;
             if (null !== $type) {
                 switch ($type) {
                     case 'integer':
                     case 'int':
                         $value = (int) $value;
                         break;
                     case 'float':
                         $value = (double) $value;
                         break;
                     case 'string':
                         $value = (string) $value;
                         break;
                     case 'boolean':
                     case 'bool':
                         $value = (bool) $value;
                         break;
                     case 'array':
                         break;
                     case 'DateTime':
                         $value = DateTime::createFromFormat('U', $value);
                         break;
                     default:
                         if (!class_exists($type)) {
                             throw new CM_Model_Exception_Validation('Field type is not a valid class/interface', null, ['type' => $type]);
                         }
                         $className = $type;
                         if (is_a($className, 'CM_Model_Abstract', true)) {
                             /** @var CM_Model_Abstract $type */
                             if ($this->_isJson($value)) {
                                 $value = CM_Util::jsonDecode($value);
                             }
                             $id = $value;
                             if (!is_array($id)) {
                                 $id = ['id' => $id];
                             }
                             $value = CM_Model_Abstract::factoryGeneric($type::getTypeStatic(), $id);
                         } elseif (is_subclass_of($className, 'CM_ArrayConvertible', true)) {
                             /** @var CM_ArrayConvertible $className */
                             $value = CM_Util::jsonDecode($value);
                             $value = $className::fromArray($value);
                         } else {
                             throw new CM_Model_Exception_Validation('Class is neither CM_Model_Abstract nor CM_ArrayConvertible', null, ['className' => $className]);
                         }
                         if (!$value instanceof $className) {
                             throw new CM_Model_Exception_Validation('Value is not an instance of the class', null, ['value' => CM_Util::var_line($value), 'className' => $className]);
                         }
                 }
             }
         }
     }
     return $value;
 }