Laravel 6:在仍然登录时删除用户

时间:2020-04-02 11:55:12

标签: php laravel bootstrap-modal

目前,我正在开发一个网站。我正在为自己的功能之一开发CRUD,直到删除点为止都没有问题。我正在使用引导模式窗口作为警告窗口,弹出该窗口是为了澄清您希望删除帐户。该视图和弹出窗口的代码如下:

<div class="container">
    <div class="row justify-content-center">
        <div class="col-md-8">
            <div class="card">
                <div class="card-header">
                <img src="{{ asset('/uploads/avatars/' . $user->avatar ) }}" style="width:100px; height:100px; float:left;
                margin-right:25px ">
                <strong>Delete {{$user->name}}'s account?</strong></div>
                <div class="card-body">
                <form action="delete" method="POST" enctype="multipart/form-data">
                {{csrf_field()}}
                <div class="form-group">
                    <label for="name">Account Email:</label>
                    <input type="text" name ="email" value="{{$user -> email}}" class="form-control" readonly>
                    <div class="form-group">
                    <div class="text-centre">
                    <p></p>
                    <button type="button" data_userid="{{$user->id}}" class="btn btn-danger" data-toggle="modal" data-target="#deleteModal">
                        Delete
                    </button>
                    </div>
                    </form>
                </div>
                </div>
            </div>
        </div>
    </div>
</div>


<div class="modal fade" id="deleteModal" tabindex="-1" role="dialog" aria-labelledby="deleteModalLabel" aria-hidden="true">
  <div class="modal-dialog" role="document">
    <div class="modal-content">
      <div class="modal-header">
        <h5 class="modal-title" id="deleteModalLabel">Are you sure?</h5>
        <form action="{{ route('delete', $user)}} " method="post">
        {{method_field('delete')}}
        {{csrf_field()}}
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>

      <div class="modal-body">
        Are you sure you want to permanetly delete your account?
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-primary" data-dismiss="modal">No, cancel</button>
        <button type="submit" class="btn btn-danger">Yes, delete my account</button>
      </div>
      </form>
    </div>
  </div>
</div>

此页面和功能的“我的路线”如下所示:

Route::get('/users/delete', 'Admin\UsersController@index')->name('delete');

Route::delete('admin/users/{user}', 'Admin\UsersController@destroy')->name('users.destroy');
    public function destroy($id,Request $request)
    {  
        $user = User::where("id","=",$id)->first();
        $user->delete($id);


        if ($user->delete()) 
        {
            return Redirect::route('home')->with('global', 'Your account has been deleted!');
        }

    }

此外,每当我尝试通过带路线的下拉菜单访问页面

 <a class="dropdown-item" href="{{ route('users.destroy', $user)}}">
                                        Delete Account

我遇到一个空白页,我确定这取决于参数。因此,为了澄清一下, 每当弹出模式窗口,并且用户单击“是,删除我的帐户”时,什么都不会发生,并且窗口保持打开状态,并且我路由到页面 {{ route('users.destroy', $user)}} 导致空白页。 任何帮助将不胜感激!

4 个答案:

答案 0 :(得分:0)

这是我们尝试删除Laravel的方法

public function destroy(User $user)
{  
    $user->delete();
    return Redirect::route('home')->with('global', 'Your account has been deleted!');        
}

答案 1 :(得分:0)

更改

<form action="{{ route('delete', $user)}} " method="post">

<form action="{{ route('delete', ['user' => $user]) }}" method="post">

以模式显示。

<a class="dropdown-item" href="{{ route('users.destroy', $user)}}">Delete Account </a>

不起作用,因为它是GET请求。删除应该是DELETE请求。

因此,您应该点击一下以打开模式;

<a href="#" data-toggle="modal" data-target="#deleteModal" class="dropdown-item"> Delete Account</a>

答案 2 :(得分:0)

根据您的配置,您似乎为表单和锚点使用了错误的别名。您应该切换它们。

这是您的路由配置:

Route::get('/users/delete', '[...]')->name('delete'); 
Route::delete('admin/users/{user}', '[...]')->name('users.destroy');

这是您应该如何使用它们:

  • 在您的<a/>上,您应该使用route('delete')
  • 在您的<form/>上,您应该使用route('users.destroy', ['user' => $userId])

您的删除操作应如下所示:

  • 删除用户
  • 注销当前用户
  • 重定向到某个地方
  public function destroy($id)
  {  
      User::find($id)->delete();
      Auth::logout();

      return Redirect::route('home')
          ->with('global', 'Your account has been deleted!');

  }

希望这会有所帮助。

答案 3 :(得分:-1)

u可以使用ajax和sweetalert做到这一点,因为它对于ui更具交互性

在刀片文件中

@foreach($user as $u)
   <a href="javascript:void(0);" classs="delete" data-id="{{$u->id}}">Delete</a>
@endforeach

您可以在刀片底部调用ajax请求

<script>
  $(document).on('click','.delete',function()
  {
    var id = $(this).data('id');
    swal({
        title: 'Are you sure you want to delete this?',
        type: "warning",
        showCancelButton: true,
        confirmButtonClass: "btn btn-danger m-btn m-btn--pill m-btn--icon m-btn--air",
        confirmButtonText: '<span><i class="la la-thumbs-up"></i> Yes, Delete it!</span>',
        cancelButtonClass: 'btn btn-secondary m-btn m-btn--pill m-btn--icon m-btn--air',
        cancelButtonText: '<span><i class="la la-thumbs-down"></i>No, thanks</span>',
    }).then(function(e){
        if(e.value){
            $.ajax({
                url:"{{route('admin.document.delete')}}",
                type:'POST',
                headers:{ 'X-CSRF-Token' : jQuery('meta[name=csrf-token]').attr('content') },
                dataType:'json',
                data:{'id':id,_token: '{{csrf_token()}}'},
                success:function(response){   
                    var msg = response.msg;
                    if(response.status=='success'){
                        //here you can do whatever after delete msg
                        //for reload u can use - (location.reload);
                    }
                },

            });
        }
    });
}); 
</script>

最后在您的控制器中

public function destroy(Request $request)
{
   $id=$request['id'];
   $delete = manageMultipleDocument::find($id)->delete();
//optional
   $flashArr = array(
            'msg' => 'Document deleted successfully.',
            'status' => 'success'
        );
//optional
   $request->Session()->flash('succ_message',$flashArr);
//Required return any thing
   return $flashArr;
}