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

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

Renders a link to the related detail view
public columnFormat ( $attribute, $model ) : null | string
$model ActiveRecord
Результат null | string
    public function columnFormat($attribute, $model)
    {
        $column = $this->generator->getColumnByAttribute($attribute, $model);
        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;
        }
        $relation = $this->generator->getRelationByColumn($model, $column);
        if ($relation) {
            if ($relation->multiple) {
                return;
            }
            $title = $this->generator->getModelNameAttribute($relation->modelClass);
            $route = $this->generator->createRelationRoute($relation, 'view');
            $method = __METHOD__;
            $modelClass = $this->generator->modelClass;
            $relationGetter = 'get' . (new ModelGenerator())->generateRelationName([$relation], $modelClass::getTableSchema(), $column->name, $relation->multiple) . '()';
            $relationModel = new $relation->modelClass();
            $pks = $relationModel->primaryKey();
            $paramArrayItems = '';
            foreach ($pks as $attr) {
                $paramArrayItems .= "'{$attr}' => \$rel->{$attr},";
            }
            $code = <<<EOS
// generated by {$method}
[
    'class' => yii\\grid\\DataColumn::className(),
    'attribute' => '{$column->name}',
    'value' => function (\$model) {
        if (\$rel = \$model->{$relationGetter}->one()) {
            return Html::a(\$rel->{$title}, ['{$route}', {$paramArrayItems}], ['data-pjax' => 0]);
        } else {
            return '';
        }
    },
    'format' => 'raw',
]
EOS;
            return $code;
        }
    }

Usage Example

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