protected function normalizeAttributes()
    {
        if ($this->attributes === null) {
            if ($this->model instanceof Model) {
                $this->attributes = $this->model->attributes();
            } elseif (is_object($this->model)) {
                $this->attributes = $this->model instanceof Arrayable ? $this->model->toArray() : array_keys(get_object_vars($this->model));
            } elseif (is_array($this->model)) {
                $this->attributes = array_keys($this->model);
            } else {
                throw new InvalidConfigException('The "model" property must be either an array or an object.');
            }
            sort($this->attributes);
        }

        foreach ($this->attributes as $i => $attribute) {
            if (is_string($attribute)) {
                if (!preg_match('/^([\w\.]+)(:(\w*))?(:(.*))?$/', $attribute, $matches)) {
                    throw new InvalidConfigException('The attribute must be specified in the format of "attribute", "attribute:format" or "attribute:format:label"');
                }
                $attribute = [
                    'attribute' => $matches[1],
                    'format' => isset($matches[3]) ? $matches[3] : 'text',
                    'label' => isset($matches[5]) ? $matches[5] : null,
                ];
            }

            if (!is_array($attribute)) {
                throw new InvalidConfigException('The attribute configuration must be an array.');
            }

            if (isset($attribute['visible']) && !$attribute['visible']) {
                unset($this->attributes[$i]);
                continue;
            }

            if (!isset($attribute['format'])) {
                $attribute['format'] = 'text';
            }
            if (isset($attribute['attribute'])) {
                $attributeName = $attribute['attribute'];
                if (!isset($attribute['label'])) {
                    $attribute['label'] = $this->model instanceof Model ? $this->model->getAttributeLabel($attributeName) : Inflector::camel2words($attributeName, true);
                }
                if (!array_key_exists('value', $attribute)) {
                    $attribute['value'] = ArrayHelper::getValue($this->model, $attributeName);
                }
            } elseif (!isset($attribute['label']) || !array_key_exists('value', $attribute)) {
                throw new InvalidConfigException('The attribute configuration requires the "attribute" element to determine the value and display label.');
            }

            $this->attributes[$i] = $attribute;
        }
    }
protected function normalizeAttributes()
    {
        if ($this->attributes === null) {
            if ($this->model instanceof Model) {
                $this->attributes = $this->model->attributes();
            } elseif (is_object($this->model)) {
                $this->attributes = $this->model instanceof Arrayable ? $this->model->toArray() : array_keys(get_object_vars($this->model));
            } elseif (is_array($this->model)) {
                $this->attributes = array_keys($this->model);
            } else {
                throw new InvalidConfigException('The "model" property must be either an array or an object.');
            }
            sort($this->attributes);
        }

        foreach ($this->attributes as $i => $attribute) {
            if (is_string($attribute)) {
                if (!preg_match('/^([\w\.]+)(:(\w*))?(:(.*))?$/', $attribute, $matches)) {
                    throw new InvalidConfigException('The attribute must be specified in the format of "attribute", "attribute:format" or "attribute:format:label"');
                }
                $attribute = [
                    'attribute' => $matches[1],
                    'format' => isset($matches[3]) ? $matches[3] : 'text',
                    'label' => isset($matches[5]) ? $matches[5] : null,
                ];
            }

            if (!is_array($attribute)) {
                throw new InvalidConfigException('The attribute configuration must be an array.');
            }

            if (isset($attribute['visible']) && !$attribute['visible']) {
                unset($this->attributes[$i]);
                continue;
            }

            if (!isset($attribute['format'])) {
                $attribute['format'] = 'text';
            }
            if (isset($attribute['attribute'])) {
                $attributeName = $attribute['attribute'];
                if (!isset($attribute['label'])) {
                    $attribute['label'] = $this->model instanceof Model ? $this->model->getAttributeLabel($attributeName) : Inflector::camel2words($attributeName, true);
                }
                if (!array_key_exists('value', $attribute)) {
                    $attribute['value'] = ArrayHelper::getValue($this->model, $attributeName);
                }
            } elseif (!isset($attribute['label']) || !array_key_exists('value', $attribute)) {
                throw new InvalidConfigException('The attribute configuration requires the "attribute" element to determine the value and display label.');
            }

            $this->attributes[$i] = $attribute;
        }
    }
protected function normalizeAttributes ( ) { if ( $ this -> attributes === null ) { if ( $ this -> model instanceof Model ) { $ this -> attributes = $ this -> model -> attributes ( ) ; } elseif ( is_object ( $ this -> model ) ) { $ this -> attributes = $ this -> model instanceof Arrayable ? $ this -> model -> toArray ( ) : array_keys ( get_object_vars ( $ this -> model ) ) ; } elseif ( is_array ( $ this -> model ) ) { $ this -> attributes = array_keys ( $ this -> model ) ; } else { throw new InvalidConfigException ( 'The "model" property must be either an array or an object.' ) ; } sort ( $ this -> attributes ) ; } foreach ( $ this -> attributes as $ i => $ attribute ) { if ( is_string ( $ attribute ) ) { if ( ! preg_match ( '/^([\w\.]+)(:(\w*))?(:(.*))?$/' , $ attribute , $ matches ) ) { throw new InvalidConfigException ( 'The attribute must be specified in the format of "attribute", "attribute:format" or "attribute:format:label"' ) ; } $ attribute = [ 'attribute' => $ matches [ 1 ] , 'format' => isset ( $ matches [ 3 ] ) ? $ matches [ 3 ] : 'text' , 'label' => isset ( $ matches [ 5 ] ) ? $ matches [ 5 ] : null , ] ; } if ( ! is_array ( $ attribute ) ) { throw new InvalidConfigException ( 'The attribute configuration must be an array.' ) ; } if ( isset ( $ attribute [ 'visible' ] ) && ! $ attribute [ 'visible' ] ) { unset ( $ this -> attributes [ $ i ] ) ; continue ; } if ( ! isset ( $ attribute [ 'format' ] ) ) { $ attribute [ 'format' ] = 'text' ; } if ( isset ( $ attribute [ 'attribute' ] ) ) { $ attributeName = $ attribute [ 'attribute' ] ; if ( ! isset ( $ attribute [ 'label' ] ) ) { $ attribute [ 'label' ] = $ this -> model instanceof Model ? $ this -> model -> getAttributeLabel ( $ attributeName ) : Inflector :: camel2words ( $ attributeName , true ) ; } if ( ! array_key_exists ( 'value' , $ attribute ) ) { $ attribute [ 'value' ] = ArrayHelper :: getValue ( $ this -> model , $ attributeName ) ; } } elseif ( ! isset ( $ attribute [ 'label' ] ) || ! array_key_exists ( 'value' , $ attribute ) ) { throw new InvalidConfigException ( 'The attribute configuration requires the "attribute" element to determine the value and display label.' ) ; } $ this -> attributes [ $ i ] = $ attribute ; } }
Normalizes the attribute specifications.
@throws InvalidConfigException
Normalizes the attribute specifications .