public function getDetailAttributes($model, $fields)
    {
        if (!$model instanceof ActiveRecord) {
            return $model->attributes();
        }
        /** @var ActiveRecord $model */
        $formats = $model->attributeFormats();
        $keys    = self::getModelKeys($model);
        list($behaviorAttributes, $blameableAttributes) = self::getModelBehaviorAttributes($model);
        $attributes = $model->attributes();
        $versionAttribute = $model->optimisticLock();
        $result = [];
        foreach ($fields as $key => $field) {
            if (is_array($field)) {
                $result[$key] = $field;
                continue;
            } elseif (!is_string($field) && is_callable($field)) {
                $result[$key] = call_user_func($field, $model);
                continue;
            }

            if (in_array($field, $attributes)) {
                if (in_array($field, $keys) || in_array($field, $blameableAttributes) || $field === $versionAttribute) {
                    continue;
                }
                $result[$field] = [
                    'attribute' => $field,
                    'format' => $formats[$field],
                ];
                continue;
            }

            $relation = $model->getRelation($field);
            if (!$relation->multiple) {
                // validate foreign keys only for hasOne relations
                foreach ($relation->link as $left => $right) {
                    if (in_array($left, $blameableAttributes)) {
                        continue;
                    }
                }
            }

            if (!Yii::$app->user->can($relation->modelClass . '.read')) {
                continue;
            }
            $result[$field] = [
                'attribute' => $field,
                'format'    => 'crudLink',
                'visible'   => true,
                'label'     => $model instanceof ActiveRecord ? $model->getRelationLabel($relation, $field) : null,
            ];
        }
        return $result;
    }
public function getDetailAttributes($model, $fields)
    {
        if (!$model instanceof ActiveRecord) {
            return $model->attributes();
        }
        /** @var ActiveRecord $model */
        $formats = $model->attributeFormats();
        $keys    = self::getModelKeys($model);
        list($behaviorAttributes, $blameableAttributes) = self::getModelBehaviorAttributes($model);
        $attributes = $model->attributes();
        $versionAttribute = $model->optimisticLock();
        $result = [];
        foreach ($fields as $key => $field) {
            if (is_array($field)) {
                $result[$key] = $field;
                continue;
            } elseif (!is_string($field) && is_callable($field)) {
                $result[$key] = call_user_func($field, $model);
                continue;
            }

            if (in_array($field, $attributes)) {
                if (in_array($field, $keys) || in_array($field, $blameableAttributes) || $field === $versionAttribute) {
                    continue;
                }
                $result[$field] = [
                    'attribute' => $field,
                    'format' => $formats[$field],
                ];
                continue;
            }

            $relation = $model->getRelation($field);
            if (!$relation->multiple) {
                // validate foreign keys only for hasOne relations
                foreach ($relation->link as $left => $right) {
                    if (in_array($left, $blameableAttributes)) {
                        continue;
                    }
                }
            }

            if (!Yii::$app->user->can($relation->modelClass . '.read')) {
                continue;
            }
            $result[$field] = [
                'attribute' => $field,
                'format'    => 'crudLink',
                'visible'   => true,
                'label'     => $model instanceof ActiveRecord ? $model->getRelationLabel($relation, $field) : null,
            ];
        }
        return $result;
    }
public function getDetailAttributes ( $ model , $ fields ) { if ( ! $ model instanceof ActiveRecord ) { return $ model -> attributes ( ) ; } /** @var ActiveRecord $model */ $ formats = $ model -> attributeFormats ( ) ; $ keys = self :: getModelKeys ( $ model ) ; list ( $ behaviorAttributes , $ blameableAttributes ) = self :: getModelBehaviorAttributes ( $ model ) ; $ attributes = $ model -> attributes ( ) ; $ versionAttribute = $ model -> optimisticLock ( ) ; $ result = [ ] ; foreach ( $ fields as $ key => $ field ) { if ( is_array ( $ field ) ) { $ result [ $ key ] = $ field ; continue ; } elseif ( ! is_string ( $ field ) && is_callable ( $ field ) ) { $ result [ $ key ] = call_user_func ( $ field , $ model ) ; continue ; } if ( in_array ( $ field , $ attributes ) ) { if ( in_array ( $ field , $ keys ) || in_array ( $ field , $ blameableAttributes ) || $ field === $ versionAttribute ) { continue ; } $ result [ $ field ] = [ 'attribute' => $ field , 'format' => $ formats [ $ field ] , ] ; continue ; } $ relation = $ model -> getRelation ( $ field ) ; if ( ! $ relation -> multiple ) { // validate foreign keys only for hasOne relations foreach ( $ relation -> link as $ left => $ right ) { if ( in_array ( $ left , $ blameableAttributes ) ) { continue ; } } } if ( ! Yii :: $ app -> user -> can ( $ relation -> modelClass . '.read' ) ) { continue ; } $ result [ $ field ] = [ 'attribute' => $ field , 'format' => 'crudLink' , 'visible' => true , 'label' => $ model instanceof ActiveRecord ? $ model -> getRelationLabel ( $ relation , $ field ) : null , ] ; } return $ result ; }
Retrieves detail view attributes configuration using the modelClass.
@param Model $model
@param array $fields
@return array detail view attributes
Retrieves detail view attributes configuration using the modelClass .