【问题标题】:Laravel: modal confimation on the controller destroy functionLaravel:控制器销毁功能的模态确认
【发布时间】:2014-10-23 15:12:00
【问题描述】:

我有一个删除按钮,用于删除这样的记录

{{Form::open(array('method'=>'DELETE', 'route' => array('users.destroy', $user->id)))}}
{{Form::submit('Delete', array('class'=>'btn btn-danger'))}}
{{Form::close()}}

表单路由到我喜欢的控制器销毁功能

public function destroy($id)
{                                                          
  User::find($id)->delete();
  return Redirect::route('users.index');
}     

但我希望在删除记录之前弹出确认警报。控制器有没有办法打开模式对话框并获取返回值?或者控制器是否打开了一个视图,该视图打开了一个模式,该模式再次指向另一个删除的控制器或重新路由的控制器......对控制器应该如何以这种方式控制逻辑感到困惑......

我的<head> 部分有 twitter bootstrap 和 jquery,就像这样

<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" rel="stylesheet">    |
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

【问题讨论】:

  • 你可以只用ajax控制按钮的点击,打开一个模态,然后在模态对话框中的一个删除按钮上,你最终可以向你的控制器提交一个发布请求。
  • 最简单的处理方法是在提交表单之前通过JS实现确认警报。您可以显示一个简单的 JS confirm 对话框或通过 AJAX 加载控制器生成的详细信息。这两个选项都不需要页面重新加载/重定向。

标签: php laravel eloquent


【解决方案1】:

与控制器无关,只需一些 JavaScript 即可。

由于您使用的是引导程序,因此最简单的方法是使用 BootstrapDialog

{{Form::open(array('method'=>'DELETE', 'route' => array('users.destroy', $user->id)))}}
{{Form::submit('Delete', array('class'=>'btn btn-danger'))}}
{{Form::close()}}

<script>
$(document).ready(function(){
    $('form').submit(function(e){
      e.preventDefault();
        url = $(this).parent().attr('action');
        BootstrapDialog.confirm('Are you sure you want to delete?', function(result){
            if(result) {
                $.ajax(url);
            }
        });
    });

});
</script>

注意不要忘记在Bootstrap和jQuery包含之后添加以下内容。

<script src="your link to bootstrap-dialog.js"></script>

您可以从here下载。

Working Demo

【讨论】:

  • 谢谢!这就是我一直在寻找的。但我无法让它工作。没有弹出窗口出现,我无法弄清楚原因。为了测试它,我添加了一个 alert('test');在我的页面加载和单击删除按钮时确实出现的 jQuery 脚本的开头,但似乎其余部分不起作用。
  • @Phil 你能做一个 JsFiddle 来调查这个问题吗?
  • 问题是dom元素$('form .btn.btn-danger')需要像href="#"一样拥有href的属性。因为preventDefault();在这里不生效。
  • jsfiddle.net/philphil/ru1t1nc6 这是我能做的最接近的小提琴。我不得不使用我的检查元素的输出来获取 html,因为我不知道如何让它与 Laravel 的代码一起使用。我也留下了我的配置地址,因为我不知道如何为另一个环境设置它。我希望它足以解决对话框没有出现的问题。
  • 抱歉,我编辑了“.btn.btn-danger”表格,因为它不起作用
猜你喜欢
  • 2017-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
  • 2016-02-04
相关资源
最近更新 更多