MODIFIER! DERNIER CODE MISE À JOUR, NOUVELLE ERREUR ^ Je conçois actuellement un site Web qui permet aux utilisateurs de créer un compte. Je rencontre des problèmes en essayant de supprimer tout d'abord l'utilisateur, puis de supprimer l'utilisateur lorsqu'il est connecté.
Mon contrôleur d'utilisateurs ressemble à ceci:
Route::post('/users/delete', 'Admin\UsersController@destroy')->name("delete-account");
Ma fenêtre d'amorçage modal qui s'ouvre à partir d'un formulaire ressemble à ceci;
<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>
Le formulaire à partir duquel le modal s'ouvre:
<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">×</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>
Et enfin mon itinéraire ressemble à ceci;
public function destroy(Request $request) { $user = Auth::user(); Auth::logout(); if ($user->delete()) { return Redirect::route('\home')->with('global', 'Your account has been deleted!'); } }
Toutes les idées sur la façon de faire fonctionner ceci d'abord et ensuite de l'implémenter sont les bienvenues. merci
3 Réponses :
Veuillez nous indiquer l'erreur que vous obtenez.
La première chose que je reconnais en voyant votre code est que vous retournez sur la deuxième ligne de votre méthode. Mais après le retour, vous vous attendez toujours à ce que le code s'exécute. Malheureusement, cela ne fonctionnera pas. Le code après un retour est ignoré.
Essayez de diviser les méthodes:
<form action="{{route(users.destroy)}}" method="delete">
La méthode de formulaire et la requête doivent être comme ceci:
Route::delete('/users/destroy', ['uses' =>'Admin\UsersController@destroy', 'as' => 'users.destroy']); Route::get('/users/delete', ['uses' =>'Admin\UsersController@delete', 'as' => 'users.delete']);
Merci. Comment afficher la vue?
L'erreur est que rien ne se passe lorsque je clique sur le bouton de confirmation de suppression dans ma fenêtre modale
Vous devez diviser l'itinéraire. Faites une autre fonction pour la vue (GET) et restez la méthode de destruction pour la fonction de suppression, et veuillez utiliser la requête DELETE pour cela.
Je vais modifier la question pour le nouveau code si vous voulez regarder. Je viens de rencontrer l'identifiant de non-objet maintenant à partir de ma méthode de suppression
Le problème réel était la non-concordance des types d'itinéraire. Vous avez défini une route de type GET
alors que le formulaire est soumis à une route de type DELETE
.
Veuillez remplacer votre code par celui-ci et vérifier: p >
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!'); } }
Et changez votre route en ceci
Route::delete('/users/{user}', 'Admin\UsersController@destroy')->name("users.delete");
Votre contrôleur ne dispose pas d'une instruction IF-THEN
<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">×</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>
Erreur rencontrée La méthode GET n'est pas prise en charge pour cette route. Méthodes prises en charge: DELETE., Même si j'ai changé la route actualisée et enregistrée vers Route :: delete ('/ users / {user}', 'Admin \ UsersController @ destroy') -> nom ("users.delete");
Vous avez défini la valeur de method
sur GET
dans la balise form
. Veuillez le changer en method = "POST"
dans votre balise .
Veuillez revoir mon code mis à jour. Rencontre avec Essayer d'obtenir la propriété 'id' de l'erreur non-objet maintenant à partir de ma méthode de suppression dans mes utilisateurs
La sortie de vos modifications entraîne la méthode GET n'est pas prise en charge pour cet itinéraire. Méthodes prises en charge: SUPPRIMER
Vous avez oublié le changement d'itinéraire. Le modèle User
sera fourni à votre méthode destory
si vous mettez l'URI d'itinéraire comme celui que j'ai mentionné. / users / {user}
.
Paramètres obligatoires manquants pour [Route: users.delete] [URI: users / {user}]
Pardon! Correction de la ligne action = "route ....
. Veuillez également la corriger dans votre code.
La réception de la sortie pour vos modifications entraîne toujours la méthode GET qui n'est pas prise en charge pour cet itinéraire. Méthodes prises en charge: SUPPRIMER, mec, cela me déroute
Comme vous avez révélé vos problèmes dans les commentaires. J'ai ajouté une nouvelle réponse, veuillez la vérifier.
Remplacez votre code par celui-ci et vérifiez:
public function destroy(Request $request) { $user = Auth::user(); Auth::logout(); if ($user->delete()) { return Redirect::route('\home')->with('global', 'Your account has been deleted!'); } }
Et changez votre route vers ceci
Route::post('/users/delete', 'Admin\UsersController@destroy')->name("delete-account");
Votre contrôleur n'a pas de IF -THEN instruction
<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">×</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>
La méthode GET n'est pas prise en charge pour cet itinéraire. Méthodes prises en charge: POST.
Il semble que tout autre type d'itinéraire que get ne fonctionne pas pour moi
Avez-vous fermé la balise form
. Comme j'ai oublié de le fermer. Code HTML mis à jour. S'il te plaît vérifie le.
La balise de formulaire est fermée oui
Veuillez mettre à jour votre code à partir de ma réponse et vérifier à nouveau.
Toujours la même erreur La méthode GET n'est pas prise en charge pour cette route. Méthodes prises en charge: POST. Je ne sais vraiment pas ce qui cause ça
Lorsque j'exécute php artisan route: list cmd, à côté de la route user.delete est GET | HEAD | utilisateurs / supprimer | users.delete, serait-ce ce qui en est la cause?
Cependant, à côté de users.destroy, il y a DELETE | admin / utilisateurs / {utilisateur} | users.destroy
Pour supprimer toutes les confusions. J'ai changé le nom de l'itinéraire en delete-account
et mis à jour le code HTML en conséquence. Veuillez essayer.
La méthode GET n'est pas prise en charge pour cet itinéraire. Méthodes prises en charge: POST. Il doit y avoir quelque chose qui ne provoque que la méthode de GET pour fonctionner, me perturbe, je n'ai eu aucun problème tant que ce point!
Veuillez indiquer l'erreur que vous obtenez. Cela aidera à proposer la bonne réponse.
Rien ne se passe lorsque je clique sur le bouton "Oui, supprimer mon compte" dans ma fenêtre modale.
Vous ne devez pas ajouter
method_field ('patch')
dans le formulaire pour une route de typeget
. Je veux dire que vous devez définir le type en utilisantRoute :: delete
.J'avais l'impression que certains navigateurs ne prennent pas en charge le type de suppression
Tout à fait possible. Mais regardez ma réponse. J'ai utilisé
POST code> méthode et ajouté
_method code> avec valeur
Supprimer code>.
@Method ('Supprimer') CODE> le faire.