schmunk42\giiant\generators\crud\providers\core\RelationProvider::attributeFormat PHP Метод

attributeFormat() публичный Метод

Renders a link to the related detail view
public attributeFormat ( $attribute ) : null | string
Результат null | string
    public function attributeFormat($attribute)
    {
        $column = $this->generator->getColumnByAttribute($attribute);
        if (!$column) {
            return;
        }
        // handle columns with a primary key, to create links in pivot tables (changed at 0.3-dev; 03.02.2015)
        // TODO double check with primary keys not named `id` of non-pivot tables
        // TODO Note: condition does not apply in every case
        if ($column->isPrimaryKey) {
            //return null; #TODO: double check with primary keys not named `id` of non-pivot tables
        }
        $relation = $this->generator->getRelationByColumn($this->generator->modelClass, $column);
        if ($relation) {
            if ($relation->multiple) {
                return;
            }
            $title = $this->generator->getModelNameAttribute($relation->modelClass);
            $route = $this->generator->createRelationRoute($relation, 'view');
            // prepare URLs
            $routeAttach = 'create';
            $routeIndex = $this->generator->createRelationRoute($relation, 'index');
            $modelClass = $this->generator->modelClass;
            $relationGetter = 'get' . (new ModelGenerator())->generateRelationName([$relation], $modelClass::getTableSchema(), $column->name, $relation->multiple) . '()';
            $relationModel = new $relation->modelClass();
            $relationModelName = StringHelper::basename($modelClass);
            $pks = $relationModel->primaryKey();
            $paramArrayItems = '';
            foreach ($pks as $attr) {
                $paramArrayItems .= "'{$attr}' => \$model->{$relationGetter}->one()->{$attr},";
            }
            $attachArrayItems = "'{$relationModelName}'=>['{$column->name}' => \$model->{$column->name}]";
            $method = __METHOD__;
            $code = <<<EOS
// generated by {$method}
[
    'format' => 'html',
    'attribute' => '{$column->name}',
    'value' => (\$model->{$relationGetter}->one() ? 
        Html::a('<i class="glyphicon glyphicon-list"></i>', ['{$routeIndex}']).' '.
        Html::a('<i class="glyphicon glyphicon-circle-arrow-right"></i> '.\$model->{$relationGetter}->one()->{$title}, ['{$route}', {$paramArrayItems}]).' '.
        Html::a('<i class="glyphicon glyphicon-paperclip"></i>', ['{$routeAttach}', {$attachArrayItems}])
        : 
        '<span class="label label-warning">?</span>'),
]
EOS;
            return $code;
        }
    }

Usage Example

Пример #1
0
 public function attributeFormat($column)
 {
     return TabPadding::pad(parent::attributeFormat($column), 3, true);
 }