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

问题描述 投票:0回答:3

编辑!最新代码已更新,新错误^我目前正在设计一个网站,该网站具有供用户创建帐户的功能。我在尝试首先删除用户,然后在登录时删除该用户时遇到问题。

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

  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引导窗口看起来像这样;

<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('users.delete'}}" 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>

最后我的路线看起来像这样;

Route::post('/users/delete', 'Admin\UsersController@destroy')->name("users.delete");

欢迎任何有关如何首先使之工作并继之以实施它的想法。谢谢

php laravel laravel-5 bootstrap-modal laravel-6
3个回答
0
投票

请告诉我们您遇到的错误。

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

尝试拆分方法:

Route::delete('/users/destroy', ['uses' =>'Admin\UsersController@destroy', 'as' => 'users.destroy']);
Route::get('/users/delete', ['uses' =>'Admin\UsersController@delete', 'as' => 'users.delete']);

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

  <form action="{{route(users.destroy)}}" method="delete">

0
投票

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

请用此代码替换您的代码并检查:

<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>

并更改您的路线至此

Route::delete('/users/{user}', 'Admin\UsersController@destroy')->name("users.delete");

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

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
投票

请用此代码替换您的代码并检查:

<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>

并更改您的路线至此

Route::post('/users/delete', 'Admin\UsersController@destroy')->name("delete-account");

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

public function destroy(Request $request)
    {
        $user = Auth::user();
        Auth::logout();

        if ($user->delete())
        {
         return Redirect::route('\home')->with('global', 'Your account has been deleted!');
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.