Я использую laravel 7. В моем приложении CRUD возникают проблемы с удалением записи пользователя. Я пробовал различные методы, которые я оставил закомментированными, чтобы вы могли увидеть, что я пробовал. Я использую Sweetalert2 для подтверждающего вызова, и когда я нажимаю «Подтвердить», он перенаправляется на правильную страницу, но я не получаю сообщения об успешном завершении и не удаляю запись из базы данных. Я новичок в Laravel, поэтому, если кто-нибудь сможет определить, где я мог ошибиться, я был бы признателен. Вот следующие соответствующие коды. (РЕДАКТИРОВАНИЕ КОДА НИЖЕ !!!) index.blade.php
@extends('layouts.admin')
@section('content')
<div class="container-fluid mt-5">
<!-- Heading -->
<div class="card mb-4 wow fadeIn">
<!--Card content-->
<div class="card-body d-sm-flex justify-content-between">
<h4 class="mb-2 mb-sm-0 pt-1">
<a href="https://mdbootstrap.com/docs/jquery/" target="_blank">Inicio</a>
<span>/</span>
<span>Registered Users</span>
</h4>
</div>
</div>
<!-- Heading -->
<!--Grid row-->
<!--Grid column-->
<div class="row">
<!--Card-->
<div class="col-md-12 mb-4">
<!--Card content-->
<div class="card">
<!-- List group links -->
<div class="card-body">
<h5>Users Online:
@php $u_total = '0'; @endphp
@foreach ($users as $user)
@php
if($user->isUserOnline()) {
$u_total = $u_total + 1;
}
@endphp
@endforeach
{{ $u_total }}
</h5>
<table id="datatable1" class="table table-bordered">
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Email</th>
<th>Role</th>
<th class="text-center">Online/Offline</th>
<th class="text-center">Banned/Unban</th>
<th>Action</th>
</tr>
</thead>
<tbody>
@foreach ($users as $user)
<tr>
<input type="hidden" name="id" value="{{ $user->id }}">
<td>{{ $user->id }}</td>
<td>{{ $user->name }}</td>
<td>{{ $user->email }}</td>
<td>{{ $user->role_as }}</td>
<td>
@if($user->isUserOnline())
<label class="py-2 px-3 badge btn-success" for="">Online</label>
@else
<label class="py-2 px-3 badge btn-warning" for="">Offline</label>
@endif
</td>
<td>
@if($user->isBanned == '0' )
<label class="py-2 px-3 badge btn-primary">Not Banned</label>
@elseif($user->isBanned == '1')
<label class="py-2 px-3 badge btn-danger">Banned</label>
@endif
</td>
<td>
<a class="badge badge-pill btn-primary px-3 py-2" href="{{ url('role-edit/'.$user->id) }}">Editar</a>
<a class="delete badge badge-pill btn-danger px-3 py-2" data-toggle="modal" href="{{ url('user-delete/'.$user->id) }}" data-target="#delete" data-id="{{ $user->id }}">Borrar</a>
</td>
</tr>
@endforeach
</tbody>
</table>
{{-- <div>
{{ $users->links() }}
</div> --}}
</div>
<!-- List group links -->
</div>
</div>
<!--/.Card-->
</div>
<!--Grid row-->
</div>
@endsection
@section('scripts')
<script>
$(document).ready(function() {
$(document).on('click', '.delete', function (e) {
e.preventDefault();
var id = $(this).data('id');
swal.fire({
title: "¿Estás Seguro/a?",
text: "¡No podrás revertir esto!",
icon: 'warning',
showCancelButton: true,
cancelButtonText: 'Cancelar',
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Sí, Borralo!'
},
function() {
$.ajax({
type: "POST",
url: "{{url('/user-delete/{id}')}}",
data: {id:id},
success: function (data) {
//
}
});
});
});
});
</script>
@endsection
В моем web.php (только соответствующий код)
Route::group(['middleware' => ['auth', 'isAdmin']], function () {
Route::get('/dashboard', function () {
return view('admin.dashboard');
});
Route::get('registered-user', 'Admin\RegisteredController@index');
Route::delete('/user-delete/{id}', 'Admin\RegisteredController@destroy');
Route::get('registered-empresa', 'Admin\EmpresaController@index');
Route::get('registered-empleado', 'Admin\EmpleadoController@index');
Route::get('role-edit/{id}', 'Admin\RegisteredController@edit');
Route::put('role-update/{id}', 'Admin\RegisteredController@updaterole');
Route::post('save-empresa', 'Admin\EmpresaController@store');
Route::get('/edit-empresa/{id}', 'Admin\EmpresaController@edit');
Route::put('/empresa-update/{id}', 'Admin\EmpresaController@update');
Route::get('/edit-empleado/{id}', 'Admin\EmpleadoController@edit');
Route::put('/empleado-update/{id}', 'Admin\EmpleadoController@update');
Route::post('save-empleado', 'Admin\EmpleadoController@store');
});
RegisteredController.php (только функция удаления)
public function destroy(Request $request, $id)
{
// $user = User::findOrFail($id)->delete();
// return redirect()->back()->with('status', 'Usuario ha sido borrado.');
// $user = User::find($id);
// $user->delete();
// return redirect()->back()->with('status', 'Usuario ha sido borrado.');
User::destroy($id);
}
РЕДАКТИРОВАТЬ!!! Я изменил способ вызова sweetalert2, но все еще получаю ошибки. Я изменил свою кнопку удаления в index.blade.php на
<a class="delete badge badge-pill btn-danger px-3 py-2" onclick="deleteConfirmation({{ $user->id }})">Borrar</a>
В том же файле я изменил сценарий на следующий:
function deleteConfirmation(id) {
swal.fire({
title: "Borrar?",
text: "¿Estás seguro/a?",
icon: "warning",
showCancelButton: !0,
confirmButtonText: "Sí,Borralo!",
cancelButtonText: "Cancelar",
reverseButtons: !0
}).then(function (e) {
if (e.value === true) {
var CSRF_TOKEN = $('meta[name="csrf-token"]').attr('content');
$.ajax({
type: 'POST',
url: "{{url('/user-delete')}}/" + id,
data: {_token: CSRF_TOKEN},
dataType: 'JSON',
success: function (results) {
if (results.success === true) {
swal.fire("Done!", results.message, "success");
} else {
swal.fire("Error!", results.message, "error");
}
}
});
} else {
e.dismiss;
}
}, function (dismiss) {
return false;
})
}
Я также удалил функцию .ready, поскольку она вызывала конфликт с sweetalert2.
Моя функция удаления в моем RegisteredController теперь выглядит так:
public function delete($id)
{
$delete = User::where('id', $id)->delete();
// check data deleted or not
if ($delete == 1) {
$success = true;
$message = "Usuario borrado exitosamente";
} else {
$success = true;
$message = "Usuario no encontrado";
}
// Return response
return response()->json([
'success' => $success,
'message' => $message,
]);
}
}
И в моем web.php я изменил маршрут на:
Route::post('/user-delete/{id}', 'Admin\RegisteredController@delete');
Теперь всплывает сладкое предупреждение, и когда я нажимаю удалить, я получаю консольную ошибку:
POST http://ecomsivendo.test/user-delete/4 419 (unknown status)
DELETE
маршрут, определенный вRoute::delete('/user-delete/{id}', 'Admin\RegisteredController@destroy');
, и вы отправляетеPOST
запрос с помощью jQuery. Вы также должны изменитьtype: "POST"
наtype: "DELETE"
. Хотя я не уверен. - person dcangulo   schedule 19.08.2020