@dindilin
Programming

Как перенести actioncolumn?

Есть actioncolumn в yii2, переназначаю эти кнопки, но учитывая что контроллеров предостаточно, и не повторять код из переназначения, как перенести их в отдельный компонент? Сам код

['class' => 'yii\grid\ActionColumn',
'template' => '{view} {update} {delete}',
'buttons' => [
    'view' => function ($url, $model, $key) {
        return Html::a('<span class="fa fa-eye"></span>', $url, [
            'title' => Yii::t('backend', 'View'),
            'class' => 'btn btn-success btn-sm',
        ]);
    },
    'update' => function ($url, $model, $key) {
        return Html::a('<span class="fa fa-pencil-square-o"></span>', $url, [
            'title' => Yii::t('backend', 'Update'),
            'class' => 'btn btn-primary btn-sm',
        ]);
    },
    'delete' => function ($url, $model, $key) {
        return Html::a('<span class="fa fa-trash"></span>', $url, [
            'title' => Yii::t('backend', 'Delete'),
            'data-confirm' => 'Are you sure you want to delete?',
            'class' => 'btn btn-danger btn-sm',
        ]);
    },
],
],


Пробую через

<?php
namespace common\components;

use \yii\grid\Actioncolumn;
use \yii\helpers\Html;

class ActionButton extends ActionColumn {

function init() {
  parent::init();
  $this->initDefaultButtons();
}

protected function initDefaultButtons()
{
 $this->buttons['view'] = function ($url, $model, $key) {
        return Html::a('<span class="fa fa-eye"></span>', $url, [
            'title' => Yii::t('backend', 'View'),
            'class' => 'btn btn-success btn-sm',
        ]);
    };
}

}


но получается какая-то фигня. Ошибка на ошибке.
Как вообще по уму переносить дублирующий код в другие файлы?
  • Вопрос задан
  • 253 просмотра
Пригласить эксперта
Ответы на вопрос 1
arutyunov
@arutyunov
Mooza.ru — Делаем сайты
У вас в buttons обычный массив, такой же как и в params.php (в конфигах).
Никто не запрещает сделать также в этой ситуации.

В других случаях дублирование кода может обходиться по-другому.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы