Как создать пользовательский ActionColumn в gridView yii2?

У меня есть gridView, и мне удалось заставить его содержать нужные мне данные, но мне нужно сделать следующий, чтобы создать столбец, содержащий две кнопки для has_facebook и has_twitter.

<?= GridView::widget([ 'dataProvider'=>$dataProvider, 'filterModel' =>$searchModel, 'columns' =>[ ['class'=>'yii\grid\SerialColumn'], 'name', 'cm_name', 'has_facebook', 'has_twitter', ['class'=>'yii\grid\ActionColumn'], ], ]); ?> 

имя | cm_name | платформы

account1 | домкрат | btn1 btn2

где btn1 и btn2 относятся к facebook и twitter.

извините за изуродованный стол.

Вам не нужно создавать собственный класс столбцов. Вы можете создать простой raw-column и показать там что угодно:

 [ 'attribute' => 'some_title', 'format' => 'raw', 'value' => function ($model) { return '<div>'.$model->id.' and other html-code</div>'; }, ], 

Эта функция

 function ($model) { return '<div>'.$model->id.' and other html-code</div>'; } 

функция обратного вызова имен. Существует ключевой метод оценки выражения в CComponent :

 public function evaluateExpression($_expression_,$_data_=array()) { if(is_string($_expression_)) { extract($_data_); return eval('return '.$_expression_.';'); } else { $_data_[]=$this; return call_user_func_array($_expression_, $_data_); } } 

в нашем случае выражение не является строкой, это функция, поэтому она запускает php-метод call_user_func_array и передает в нее вашу модель.

Просто совет: если вы обрабатываете сложные данные, это было бы полезно в Yii2 ..

 echo yii\grid\GridView::widget([ 'dataProvider' => $dataProvider, 'columns' => [ 'id', [ 'attribute' => 'Details', 'format' => 'raw', 'value' => function ($model) { return $this->render('//path/to/view.php', ['model' => $model]); }, ] ] ]); 

или вы можете использовать

 echo \yii\widgets\ListView::widget([ 'dataProvider' => $dataProvider, 'itemView' => '//path/to/view.php', ]); 

и частичный вид может быть чем-то вроде

 <?= Html::img('@web/user/images' . $model->id . '.jpeg', ['alt' => 'Profile Picture', 'class' => 'img img-rounded']); ?> <?= Html::encode($model->firstName) ?> <?= Html::encode($model->lastName) ?>, living in <?= Html::encode($model->city) ?> <?= Html::encode($model->country) ?>