首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel-6:删除登录用户:此路由不支持GET方法。支持的方法: POST

Laravel-6:删除登录用户:此路由不支持GET方法。支持的方法: POST
EN

Stack Overflow用户
提问于 2020-04-01 19:57:54
回答 3查看 78关注 0票数 0

编辑!最新的代码更新,新的错误^我目前正在设计一个网站,它有一个为用户创建帐户的功能。我遇到了问题,试图让用户首先被删除,然后用户被删除,同时登录。

我的用户控制器看起来是这样的:

代码语言:javascript
复制
    public function destroy(Request $request)
    {
        $user = Auth::user();
        Auth::logout();

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

我从表单打开的Modal引导窗口如下所示;

代码语言:javascript
复制
<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>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
        <form action="{{route('users.delete', ['user' => Auth::id()])}}" method="Post">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      @csrf
      @method('delete')
      <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>
    </div>
  </div>
</div>

模态打开的形式是:

代码语言:javascript
复制
<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" class="btn btn-danger" data-toggle="modal" data-target="#deleteModal">
                        Delete
                    </button>
                    </div>
                </div>
                </div>
            </div>
        </div>
    </div>
</div>

最后我的路线是这样的;

代码语言:javascript
复制
Route::post('/users/delete', 'Admin\UsersController@destroy')->name("delete-account");

任何想法,如何首先使这项工作,第二次实施,是值得欢迎的。谢谢

EN

回答 3

Stack Overflow用户

发布于 2020-04-01 20:07:44

请告诉我们你所犯的错误。

我认识到看到代码的第一件事是,返回方法的第二行。但是返回之后,您仍然希望代码能够运行。不幸的是,这是行不通的。忽略返回后的代码。

尝试拆分这些方法:

代码语言:javascript
复制
Route::delete('/users/destroy', ['uses' =>'Admin\UsersController@destroy', 'as' => 'users.destroy']);
Route::get('/users/delete', ['uses' =>'Admin\UsersController@delete', 'as' => 'users.delete']);

表单方法和请求应如下所示:

代码语言:javascript
复制
  <form action="{{route(users.destroy)}}" method="delete">
票数 0
EN

Stack Overflow用户

发布于 2020-04-01 20:13:35

实际问题是路线类型不匹配。在表单被提交到DELETE类型的路由时,您已经定义了一个DELETE类型的路由。

请用此代码替换代码,并检查:

代码语言:javascript
复制
<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>
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
        <form action="{{route('users.delete', ['user' => Auth::id()])}}" method="Post">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      @csrf
      @method('delete')
      <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>
    </div>
  </div>
</div>

改变你的路线

代码语言:javascript
复制
Route::delete('/users/{user}', 'Admin\UsersController@destroy')->name("users.delete");

您的控制器缺少IF-THEN语句。

代码语言:javascript
复制
public function destroy(User $user)
    {

        if($user->id !== Auth::id()) return view('admin.users.delete')->with('user', Auth::user());

        Auth::logout();

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

Stack Overflow用户

发布于 2020-04-01 21:00:39

请用此代码替换代码,并检查:

代码语言:javascript
复制
<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-account'}}" method="Post">
        @csrf
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
        </form>
      </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>
    </div>
  </div>
</div>

改变你的路线

代码语言:javascript
复制
Route::post('/users/delete', 'Admin\UsersController@destroy')->name("delete-account");

您的控制器缺少IF-THEN语句。

代码语言:javascript
复制
public function destroy(Request $request)
    {
        $user = Auth::user();
        Auth::logout();

        if ($user->delete())
        {
         return Redirect::route('\home')->with('global', 'Your account has been deleted!');
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60979293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档