En guise de suivi de la création de nouvelles notes à l'aide de formulaires et de méthodes de requête, nous allons maintenant explorer comment modifier et mettre à jour les notes existantes dans la base de données à l'aide de la méthode de requête PATCH.
Lorsqu'un utilisateur souhaite modifier une note, nous devons lui fournir un moyen d'accéder à l'écran de modification. C'est là qu'intervient le bouton Modifier.
Tout d'abord, nous devons ajouter un bouton d'édition sous la note sur l'écran de note unique dans show.view.php en supprimant le code du bouton de suppression du fichier. Ce bouton déplacera l'utilisateur vers l'écran d'édition.
<footer class="mt-6"> <a href="/note/edit?id=<?= $note['id'] ?>" class="inline-flex justify-center rounded-md border border-transparent bg-gray-500 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2">Edit</a> </footer>
Le bouton Modifier est placé dans la section pied de page de la page d'affichage des notes. Lorsqu'on clique dessus, il redirige l'utilisateur vers l'écran d'édition, en passant l'ID de la note comme paramètre dans l'URL.
Le fichier edit.php contrôle le processus d'édition. Il récupère la note de la base de données et autorise l'utilisateur à modifier la note. Si l'utilisateur est autorisé, l'écran d'édition s'affiche, permettant à l'utilisateur d'apporter des modifications à la note.
<?php use Core\App; use Core\Database; $db = App::resolve(Database::class); $currentUserId = 1; $note = $db->query('select * from notes where id = :id', [ 'id' => $_GET['id'] ])->findOrFail(); authorize($note['user_id'] === $currentUserId); view("notes/edit.view.php", [ 'heading' => 'Edit Note', 'errors' => [], 'note' => $note ]);
Le fichier edit.php utilise la classe Database pour récupérer la note de la base de données. Il vérifie ensuite si l'utilisateur est autorisé à modifier la note en comparant le user_id avec le currentuserID. Si autorisé, l'écran de modification s'affiche.
Le fichier edit.view.php contient le code pour afficher le corps de la note pour l'éditer, avec deux boutons : Mettre à jour et Annuler.
Bouton Mettre à jour : soumet la note mise à jour au serveur et la stocke dans la base de données
Bouton Annuler : annule le processus d'édition et redirige l'utilisateur vers l'écran des notes.
<label for="body" class="block text-sm font-medium text-gray-700">Body</label> <div class="mt-1"> <textarea id="body" name="body" rows="3" class="mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-indigo-500 focus:ring-indigo-500 sm:text-sm" placeholder="Here's an idea for a note..."><?= $note['body'] ?></textarea> <?php if (isset($errors['body'])) : ?> <p class="text-red-500 text-xs mt-2"><?= $errors['body'] ?></p> <?php endif; ?> </div> <div class="bg-gray-50 px-4 py-3 text-right sm:px-6 flex gap-x-4 justify-end items-center"> <button type="button" class="text-red-500 mr-auto" onclick="document.querySelector('#delete-form').submit()">Delete</button> <a href="/notes" class="inline-flex justify-center rounded-md border border-transparent bg-gray-500 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2">Cancel</a> <button type="submit" class="inline-flex justify-center rounded-md border border-transparent bg-indigo-600 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2">Update</button> </div>
La vue Modifier la note affiche le corps de la note dans une zone de texte, permettant à l'utilisateur d'apporter des modifications. Le bouton de mise à jour soumet la note mise à jour au serveur et la stocke dans la base de données.
Pour mettre à jour une note, nous devons créer un nouveau fichier nommé update.php qui vérifie la validation de la note et vérifie également l'autorisation de l'utilisateur. Ce fichier permettra uniquement aux utilisateurs autorisés de visualiser et de modifier les notes déjà présentes dans la base de données.
<?php use Core\App; use Core\Database; use Core\Validator; $db = App::resolve(Database::class); $currentUserId = 1; // find the corresponding note $note = $db->query('select * from notes where id = :id', [ 'id' => $_POST['id'] ])->findOrFail(); // Check authorization authorize($note['user_id'] === $currentUserId); // Check validation $errors = []; if (!Validator::string($_POST['body'], 1, 100000)) { $errors['body'] = 'A body of no more than 1,000 characters is required.'; } // if no validation errors, then update if (count($errors)) { return view('notes/edit.view.php', [ 'heading' => 'Edit Note', 'errors' => $errors, 'note' => $note ]); } $db->query('update notes set body = :body where id = :id', [ 'id' => $_POST['id'], 'body' => $_POST['body'] ]); // redirect the user header('location: /notes'); die();
Pour permettre l'édition et la mise à jour des notes, nous devons ajouter les itinéraires suivants dans route.php :
$router->get('/note/edit', 'controllers/notes/edit.php'); $router->patch('/note', 'controllers/notes/update.php');
Ces itinéraires permettront l'édition et la mise à jour des notes à l'aide de la méthode de requête PATCH.
Lorsqu'un utilisateur souhaite modifier une note, il sera redirigé vers l'écran d'édition où l'utilisateur pourra apporter des modifications à la note. Lorsqu'un utilisateur soumet des modifications, le fichier update.php sera appelé. Ce fichier vérifiera si l'utilisateur est autorisé à modifier la note et si la validation de la note est correcte. Si les deux vérifications réussissent, la note sera mise à jour dans la base de données et l'utilisateur sera redirigé vers l'écran des notes. Si l'une ou l'autre des vérifications échoue, l'utilisateur sera redirigé vers l'écran d'édition avec des messages d'erreur.
En suivant ces étapes, un utilisateur peut facilement modifier et mettre à jour la note à l'aide de la méthode de requête PATCH.
J'espère que vous l'avez bien compris.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!