Salut à tous,
Je bloque depuis un petit moment sur une tâche relativement simple, mais qui avec Laravel me donne du fil à retordre : la suppression en Ajax.
Apparemment il manquerait un argument à ma méthode destroy() mais je ne vois pas pourquoi :/
Si quelqu'un a une idée je suis preneur :)
Merci à vous !
Controller :
public function destroy(Request $request, $id)
{
$response = [];
$activity = Activity::find($id);
if( !$activity ) {
$response = [
'status' => 'error',
'message' => 'Cette publication n\'existe pas',
];
}
if( !$this->authorize('destroy', $activity) ) {
$response = [
'status' => 'error',
'message' => 'Vous n\'avez pas l\'autorisation de supprimer cette publication',
];
}
if( $activity->delete() ) {
$response = [
'id' => $id,
'status' => 'success',
'message' => 'La publication a été supprimée !',
];
} else {
$response = [
'status' => 'error',
'message' => 'Une erreur est survenue durant la suppression'
];
}
if( $request->ajax() ) {
return new JsonResponse($response);
} else {
alert()->{$response['status']}($response['message']);
return redirect()->route('front.index');
}
}
HTML :
{!! Form::open(['method' => 'DELETE']) !!}
<li><a alt="Mettre à jour la publication" title="Mettre à jour la publication" href="#"><i class="fa fa-pencil"></i></a></li>
<li>
{!! Form::hidden('id', $activity->id) !!}
<button type="submit" class="em-danger delete-confirm" alt="Supprimer la publication" title="Supprimer à jour la publication" data-id="{{ $activity->id }}" data-href="{{ route('activity.destroy', ['activity' => $activity->id]) }}"><i class="fa fa-trash"></i></button>
</li>
{!! Form::close() !!}
JS :
$('.delete-confirm').on('click', function(e) {
e.preventDefault();
sweetAlert({ title: 'Confirmation', text: 'Êtes vous sûr de vouloir supprimer cet élément ? Cette action est irréverssible', type: 'warning', showCancelButton: true, confirmButtonColor: "#02c66c", cancelButtonText: 'Non', confirmButtonText: 'Oui', closeOnConfirm: false, closeOnCancel: true, showLoaderOnConfirm: true,
}, function()
{
$.ajax({
url: $(this).attr('data-href'),
method: 'DELETE',
dataType: 'JSON',
data: {
'_token': $('input[name="_token"]').val(),
'id': $(this).attr('data-id'),
'_method': $('input[name="_method"]').val()
},
success: function(data) {
if( data.status == 'success' ) {
$('#activity_' + data.id).fadeOut();
sweetAlert('Supprimé !', data.message, 'success');
} else {
sweetAlert('Oups...', data.message, 'error');
}
},
error: function(xhr, message) {
sweetAlert('Oups...', 'Une erreur est survenue', 'error');
console.log(xhr);
console.log(message);
}
});
});
});
Mon soucis venait en fait de mon $(this) qui ne récupérerait pas le bon conteneur... Erreur bête en JS mais c'est bon ^^