Laravel -6: удаление зарегистрированного пользователя: метод GET не поддерживается для этого маршрута. Поддерживаемые методы: POST - PullRequest
0 голосов
/ 01 апреля 2020

EDIT! ПОСЛЕДНИЙ КОД ОБНОВЛЕН, НОВАЯ ОШИБКА ^ В настоящее время я занимаюсь разработкой веб-сайта, в котором пользователи могут создавать учетные записи. Я сталкиваюсь с проблемами, пытаясь сначала удалить пользователя, а затем удалить его во время входа в систему.

Контроллер My Users выглядит так:

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

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

My Модальное bootstrap окно, которое открывается из формы, выглядит так:

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

Форма, из которой открывается модальное окно:

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

И, наконец, мой маршрут выглядит следующим образом;

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

Любые идеи о том, как, во-первых, заставить это работать, а во-вторых, реализовать его, приветствуются. спасибо

Ответы [ 3 ]

0 голосов
/ 01 апреля 2020

Фактической проблемой было несоответствие типов маршрутов. Вы определили маршрут типа 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 голосов
/ 02 апреля 2020

Пожалуйста, замените ваш код на этот и проверьте:

<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!');
        }
    }
0 голосов
/ 01 апреля 2020

Пожалуйста, сообщите нам ошибку, которую вы получаете.

Первое, что я узнаю, увидев ваш код, это то, что вы возвращаетесь во второй строке вашего метода. Но после возврата вы все еще ожидаете выполнения кода. К сожалению, это не сработает. Код после возврата игнорируется.

Попробуйте разделить методы:

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">
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...