lithium\data\DocumentSchema::_castArray PHP Method

_castArray() protected method

protected _castArray ( $object, $val, $pathKey, $options, $defaults )
    protected function _castArray($object, $val, $pathKey, $options, $defaults)
    {
        $isArray = $this->is('array', $pathKey) && !$options['asContent'] && !$object instanceof $this->_classes['set'];
        $isObject = $this->type($pathKey) === 'object';
        $valIsArray = is_array($val);
        $numericArray = false;
        $class = 'entity';
        if (!$valIsArray && !$isArray) {
            return $this->_castType($val, $pathKey);
        }
        if ($valIsArray) {
            $numericArray = !$val || array_keys($val) === range(0, count($val) - 1);
        }
        if ($isArray || $numericArray && !$isObject) {
            $val = $valIsArray ? $val : array($val);
            $class = 'set';
        }
        if ($options['wrap']) {
            $config = array('parent' => $options['parent'], 'model' => !$options['model'] && $object ? $object->model() : $options['model'], 'schema' => $this);
            $config += compact('pathKey') + array_diff_key($options, $defaults);
            if (!$pathKey && ($model = $options['model'])) {
                $exists = is_object($object) ? $object->exists() : false;
                $config += array('class' => $class, 'exists' => $exists, 'defaults' => false);
                $val = $model::create($val, $config);
            } else {
                $config['data'] = $val;
                $val = $this->_instance($class, $config);
            }
        } elseif ($class === 'set') {
            $val = $val ?: array();
            foreach ($val as &$value) {
                $value = $this->_castType($value, $pathKey);
            }
        }
        return $val;
    }