2016-05-09 87 views
1

我正在尝试使用yii2进行删除确认模式。 我有一个网格视图与删除GridView的项目的操作按钮。Yii2删除确认模式

当用户点击此按钮时,弹出窗口模式显示,我无法获取必须删除的项目的ID。

这里我GridView控件的代码(仅操作按钮):

'buttons' => [ 
       'view' => function ($url, $model) { 
          return Html::a('', $url, ['class' => 'btn btn-success btn-xs glyphicon glyphicon-eye-open']); 
         }, 
      'edit' => function ($url, $model) { 
          if (Yii::$app->user->getIdGroupe() != 1) 
          { 
           return Html::a(''); 
          } 
          return Html::a('', $url, ['class' => 'btn btn-warning btn-xs glyphicon glyphicon-pencil']); 
         }, 
         'delete' => function ($url, $model) { 
          return Html::a('', $url, ['class' => 'btn btn-danger btn-xs glyphicon glyphicon-trash', 'data-toggle' => 'modal', 'data-target' => '#modal', 'data-id' => $model->idRessource, 'id' => 'popupModal']); 
         }, 
       ], 
'urlCreator' => function ($action, $model, $key, $index) { 
          if ($action == 'view') { 
           $url = Url::to(['/ressource/view', 'id' => $model->idRessource]); 
          } else if ($action == 'edit') { 
           $url = Url::to(['/ressource/edit', 'id' => $model->idRessource]); 
          } else { 
           $url = '#'; 
          } 
          return $url; 
        }, 

然后模态:

<?php $url = Url::to(['ressource/delete']); ?> 

<?php Modal::begin([ 
    'header' => '<h2 class="modal-title"></h2>', 
    'id'  => 'modal-delete', 
    'footer' => Html::a('Supprimer', $url, ['class' => 'btn btn-danger']), 
]); ?> 

<?= 'Etes vous sur de vouloir supprimer la ressource ...'; ?> 

<?php Modal::end(); ?> 

最后的javascript:

<?php 
$this->registerJs("$(function() { 
    $('#popupModal').click(function(e) { 
     e.preventDefault(); 
     $('#modal-delete').modal('show').find('.modal-body') 
     .load($('.modal-dialog')); 
     var modal = $(this); 
     var triggered = $(e.relatedTarget); 
     var id = triggered.data('id'); 
     $('.modal-title').text('Supprimer la ressource ' + id); 
    }); 
});"); ?> 

而且问题是我无法获取该项目的ID,并且我在构建$ url时需要它,因为操作'actionDelete'需要它的ID EM。

希望它是明确的,你将能够帮助我! 感谢

+0

actionDelete()需要通过post方法进行编号。 –

+0

我使用我自己的'actionDelete()',但感谢您的建议! ;) –

回答

1

我发现我自己的解决方案和谢谢@晓松国所以这里是完整的答案

我的删除按钮:

'delete' => function ($url, $model) { 
    return Html::a('', $url, [ 
     'class'  => 'btn btn-danger btn-xs glyphicon glyphicon-trash popup-modal', 
     'data-toggle' => 'modal', 
     'data-target' => '#modal', 
     'data-id'  => $model->idRessource, 
     'data-name' => $model->nomRessource, 
     'id'   => 'popupModal', 
    ]); 
}, 

我的网址制作:

'urlCreator'  => function ($action, $model, $key, $index) { 
    $url = Url::to(['/ressource/delete', 'id' => $model->idRessource]); 
    return $url; 
}, 

我的模式:

<?php Modal::begin([ 
    'header' => '<h2 class="modal-title"></h2>', 
    'id'  => 'modal-delete', 
    'footer' => Html::a('Supprimer', '', ['class' => 'btn btn-danger', 'id' => 'delete-confirm']), 
]); ?> 

<?= 'Etes vous sur de vouloir supprimer cette ressource ?'; ?> 

<?php Modal::end(); ?> 

终于JavaScript的:

<?php 
$this->registerJs(" 
    $(function() { 
     $('.popup-modal').click(function(e) { 
      e.preventDefault(); 
      var modal = $('#modal-delete').modal('show'); 
      modal.find('.modal-body').load($('.modal-dialog')); 
      var that = $(this); 
      var id = that.data('id'); 
      var name = that.data('name'); 
      modal.find('.modal-title').text('Supprimer la ressource \"' + name + '\"'); 

      $('#delete-confirm').click(function(e) { 
       e.preventDefault(); 
       window.location = 'delete?id='+id; 
      }); 
     }); 
    });" 
); 

如果你有比我的答案更好的解决方案,请不要犹豫,告诉我!

感谢大家的帮助:

+0

默认情况下,'delete'操作只接受'post'方法。 ''。使用这些由GridView创建的代码。 –

2

PHP按钮:

'delete' => function ($url, $model) { 
    return Html::a('', $url, [ 
     'class' => '... popup-modal', 
     'data-toggle' => 'modal', 
     'data-target' => '#modal', 
     'data-id' => $model->idRessource, 
     'id' => 'popupModal-'. $model->idRessource 
    ]); 
}, 

JS:

<?php 
$this->registerJs("$(function() { 
$('.popup-modal').click(function(e) { 
    e.preventDefault(); 
    var modal = $('#modal-delete').modal('show'); 
    modal.find('.modal-body').load($('.modal-dialog')); 
    var that = $(this); 
    var id = that.data('id'); 
    modal.find('.modal-title').text('Supprimer la ressource ' + id); 
}); 
});"); 
?> 
+0

感谢人,它的工作原理,但现在我有id(在JS)我怎样才能得到它在PHP中? –

+0

我找到了解决方案,我会自己发布完整的答案,非常感谢您的帮助我会引用你:) –

0

,才有可能把ID类似模型的网址:

<?php $url = Url::to(['ressource/delete', 'id' => $model->id]); ?> 
+1

''id'=> $ model-> id]);' –

+0

我不能使用' $ model-> id'在匿名函数之外(我定义每个按钮或urlCreator),这样我的问题:/ –