Sebagai susulan untuk mencipta nota baharu menggunakan borang dan kaedah permintaan, kami kini akan meneroka cara mengedit dan mengemas kini nota sedia ada dalam pangkalan data menggunakan kaedah permintaan PATCH.
Apabila pengguna ingin mengedit nota, kami perlu menyediakan cara untuk mereka mengakses skrin edit. Di sinilah butang edit masuk.
Pertama, kita perlu menambah butang edit di bawah nota pada skrin nota tunggal dalam show.view.php dengan mengalih keluar kod butang padam daripada fail. Butang ini akan mengalihkan pengguna ke skrin edit.
<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>
Butang edit diletakkan di bahagian pengaki halaman paparan nota. Apabila diklik, ia mengubah hala pengguna ke skrin edit, menghantar ID nota sebagai parameter dalam URL.
Fail edit.php mengawal proses penyuntingan. Ia mendapatkan semula nota daripada pangkalan data dan memberi kuasa kepada pengguna untuk mengedit nota. Jika pengguna diberi kuasa, skrin edit dipaparkan, membenarkan pengguna membuat perubahan pada nota.
<?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 ]);
Fail edit.php menggunakan kelas Pangkalan Data untuk mendapatkan semula nota daripada pangkalan data. Ia kemudian menyemak sama ada pengguna dibenarkan untuk mengedit nota dengan membandingkan user_id dengan currentuserID. Jika dibenarkan, skrin edit dipaparkan.
Fail edit.view.php mengandungi kod untuk memaparkan badan nota untuk mengedit, dengan dua butang: Kemas Kini dan Batal.
Butang kemas kini: menyerahkan nota yang dikemas kini ke pelayan dan menyimpannya dalam pangkalan data
Butang Batal: membatalkan proses pengeditan dan mengubah hala pengguna kembali ke skrin nota.
<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>
Paparan edit nota memaparkan badan nota dalam kawasan teks, membolehkan pengguna membuat perubahan. Butang kemas kini menyerahkan nota yang dikemas kini ke pelayan dan menyimpannya dalam pangkalan data.
Untuk mengemas kini nota, kami perlu mencipta fail baharu bernama update.php yang menyemak pengesahan nota dan juga menyemak kebenaran pengguna. Fail ini hanya akan membenarkan pengguna yang dibenarkan untuk melihat dan mengedit nota yang sudah ada dalam pangkalan data.
<?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();
Untuk membolehkan pengeditan dan pengemaskinian nota, kami perlu menambah laluan berikut dalam route.php:
$router->get('/note/edit', 'controllers/notes/edit.php'); $router->patch('/note', 'controllers/notes/update.php');
Laluan ini akan membolehkan pengeditan dan pengemaskinian nota menggunakan kaedah permintaan PATCH.
Apabila pengguna ingin mengedit nota, pengguna akan dibawa ke skrin edit di mana pengguna boleh membuat perubahan pada nota. Apabila pengguna menyerahkan perubahan, fail update.php akan dipanggil. Fail ini akan menyemak sama ada pengguna dibenarkan untuk mengedit nota dan jika pengesahan nota adalah betul. Jika kedua-dua cek lulus, nota akan dikemas kini dalam pangkalan data dan pengguna akan dialihkan semula ke skrin nota. Jika salah satu semakan gagal, pengguna akan diubah hala semula ke skrin edit dengan mesej ralat.
Dengan mengikut langkah ini, pengguna boleh mengedit dan mengemas kini nota dengan mudah menggunakan kaedah permintaan PATCH.
Saya harap anda telah memahaminya dengan jelas.
Atas ialah kandungan terperinci Mengedit dan Mengemas kini Nota menggunakan Kaedah Permintaan PATCH. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!