Как изменить просмотр, обновление и удаление URL-адреса в столбце действий в yii2

Я создаю действие для обновления и просмотра в контроллере, но это действие не изменяется в столбце действия на индексной странице

 public function actionLeadView($id){
   $id =  $_GET['id'];
   $model = Leads::findOne($id);
   return $this->render('viewlead', [
            'model' => $model,
        ]);
 }    
 public function actionLeadUpdate($id){
   $id =  $_GET['id'];
   $model = Leads::findOne($id);
   date_default_timezone_set("Asia/Kolkata");
   $date = date('Y/m/d H-i-sa');       
    if ($model->load(Yii::$app->request->post())) {
      $model->modified = $date;
      if($model->validate()){
         $model->save();
         return $this->redirect(['viewlead', 'id' => $model->id]);                
            }else {
            return $this->render('updatelead', [
                'model' => $model,
            ]);
      }    
   } 
   else 
   {
        return $this->render('updatelead', [
            'model' => $model,
        ]);
 }
}

Ответ 1

       [
          'class' => 'yii\grid\ActionColumn',
          'header' => 'Actions',
          'headerOptions' => ['style' => 'color:#337ab7'],
          'template' => '{view}{update}{delete}',
          'buttons' => [
            'view' => function ($url, $model) {
                return Html::a('<span class="glyphicon glyphicon-eye-open"></span>', $url, [
                            'title' => Yii::t('app', 'lead-view'),
                ]);
            },

            'update' => function ($url, $model) {
                return Html::a('<span class="glyphicon glyphicon-pencil"></span>', $url, [
                            'title' => Yii::t('app', 'lead-update'),
                ]);
            },
            'delete' => function ($url, $model) {
                return Html::a('<span class="glyphicon glyphicon-trash"></span>', $url, [
                            'title' => Yii::t('app', 'lead-delete'),
                ]);
            }

          ],
          'urlCreator' => function ($action, $model, $key, $index) {
            if ($action === 'view') {
                $url ='index.php?r=client-login/lead-view&id='.$model->id;
                return $url;
            }

            if ($action === 'update') {
                $url ='index.php?r=client-login/lead-update&id='.$model->id;
                return $url;
            }
            if ($action === 'delete') {
                $url ='index.php?r=client-login/lead-delete&id='.$model->id;
                return $url;
            }

          }
          ],

Ответ 2

Часто вам нужно изменить имя контроллера только в URL-адресе кнопки действия. Вы можете сделать это просто, используя urlCreator

[
    'class' => 'yii\grid\ActionColumn',
    'urlCreator' => function ($action, $model, $key, $index) {
        return Url::to(['another-controller-name/'.$action, 'id' => $model->id]);
    }
],

Ответ 3

В gridview,

[
    'class' => 'yii\grid\ActionColumn',
    'template' => '{leadView} {leadUpdate}',
    'buttons' => [
       'leadView' => function ($url, $model) {
           $url = Url::to(['controller/lead-view', 'id' => $model->whatever_id]);
          return Html::a('<span class="fa fa-eye"></span>', $url, ['title' => 'view']);
       },
       'leadUpdate' => function ($url, $model) {
           $url = Url::to(['controller/lead-update', 'id' => $model->whatever_id]);
           return Html::a('<span class="fa fa-pencil"></span>', $url, ['title' => 'update']);
       },
    ]
]

Ответ 4

Так как вопрос

как изменить просмотр, обновление и удалить URL-адрес в столбце действий в yii2

Я улучшаю ответ @insane-черепа, добавляя действие удаления

[
'class'    => 'yii\grid\ActionColumn',
'template' => '{leadView} {leadUpdate} {leadDelete}',
'buttons'  => [
    'leadView'   => function ($url, $model) {
        $url = Url::to(['controller/lead-view', 'id' => $model->whatever_id]);
        return Html::a('<span class="fa fa-eye"></span>', $url, ['title' => 'view']);
    },
    'leadUpdate' => function ($url, $model) {
        $url = Url::to(['controller/lead-update', 'id' => $model->whatever_id]);
        return Html::a('<span class="fa fa-pencil"></span>', $url, ['title' => 'update']);
    },
    'leadDelete' => function ($url, $model) {
        $url = Url::to(['controller/lead-delete', 'id' => $model->whatever_id]);
        return Html::a('<span class="fa fa-trash"></span>', $url, [
            'title'        => 'delete',
            'data-confirm' => Yii::t('yii', 'Are you sure you want to delete this item?'),
            'data-method'  => 'post',
        ]);
    },
]

]

Ответ 5

Я новичок в Yii2, спасибо, что помогли мне с вашим кодом @cbaconnier. Это ваш код с небольшой модификацией:

[
'class'    => 'yii\grid\ActionColumn',
'template' => '{leadView} {leadUpdate} {leadDelete}',
'buttons'  => [
    'leadView'   => function ($url, $model) {
        $url = Url::to(['datakegiatan/view', 'id' => $model->ID_DATA]);
        return Html::a('<span class="fa fa-eye"></span>', $url, ['title' => 'view']);
    },
    'leadUpdate' => function ($url, $model) {
        $url = Url::to(['datakegiatan/update', 'id' => $model->ID_DATA]);
        return Html::a('<span class="fa fa-pencil"></span>', $url, ['title' => 'update']);
    },
    'leadDelete' => function ($url, $model) {
        $url = Url::to(['datakegiatan/delete', 'id' => $model->ID_DATA]);
        return Html::a('<span class="fa fa-trash"></span>', $url, [
            'title'        => 'delete',
            'data-confirm' => Yii::t('yii', 'Are you sure you want to delete this item?'),
            'data-method'  => 'post',
        ]);
    },
]],

Ответ 6

Если вы хотите изменить только URL-адреса и оставить кнопки по умолчанию, используйте атрибут urlCreator.

'class' => 'yii\grid\ActionColumn',
        'template' => '{delete} ',
        'urlCreator' => function ($action, $model, $key, $index) {
            return Url:to(["controller/action"]);
        }