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);
            }
        });
    });
});

1 réponse


Alexandre #lbac
Auteur
Réponse acceptée

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