作為使用表單和請求方法建立新筆記的後續操作,我們現在將探索如何使用 PATCH 請求方法編輯和更新資料庫中的現有筆記。
當使用者想要編輯筆記時,我們需要提供他們一種存取編輯畫面的方式。這就是編輯按鈕的用武之地。
首先,我們需要透過從檔案中刪除刪除按鈕程式碼,在 show.view.php 中的單一註解畫面上的註解下方新增一個編輯按鈕。此按鈕會將使用者移至編輯畫面。
<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>
編輯按鈕位於筆記顯示頁面的頁腳部分。單擊時,它將使用者重定向到編輯螢幕,並將筆記 ID 作為 URL 中的參數傳遞。
edit.php 檔案控制編輯過程。它從資料庫中檢索註釋並授權使用者編輯註釋。如果使用者獲得授權,則會顯示編輯螢幕,允許使用者對註釋進行更改。
<?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 ]);
edit.php 檔案使用 Database 類別從資料庫中檢索註解。然後,它透過將 user_id 與當前使用者 ID 進行比較來檢查使用者是否有權編輯註釋。如果獲得授權,則會顯示編輯畫面。
edit.view.php 檔案包含顯示註解正文以進行編輯的程式碼,有兩個按鈕:更新和取消。
更新按鈕:將更新後的筆記提交到伺服器並儲存在資料庫中
取消按鈕:取消編輯程序並將使用者重新導向回筆記畫面。
<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>
編輯註釋視圖在文字區域中顯示註釋正文,允許使用者進行變更。更新按鈕將更新的筆記提交到伺服器並將其儲存在資料庫中。
要更新註釋,我們需要建立一個名為 update.php 的新文件,用於檢查註釋的驗證並檢查使用者的授權。該文件僅允許授權使用者檢視和編輯資料庫中已存在的註解。
<?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();
為了實現筆記的編輯和更新,我們需要在route.php中加入以下路由:
$router->get('/note/edit', 'controllers/notes/edit.php'); $router->patch('/note', 'controllers/notes/update.php');
這些路由將允許使用 PATCH 請求方法編輯和更新註解。
當使用者想要編輯註釋時,使用者將被帶到編輯螢幕,使用者可以在其中對註釋進行更改。當使用者提交更改時,將呼叫 update.php 檔案。該文件將檢查使用者是否有權編輯註釋以及註釋的驗證是否正確。如果兩項檢查都通過,則註釋將在資料庫中更新,並且使用者將被重定向回註釋畫面。如果任一檢查失敗,使用者將被重新導向回編輯畫面並顯示錯誤訊息。
透過執行下列步驟,使用者可以使用 PATCH 請求方法輕鬆編輯和更新註解。
希望您已經清楚地理解了。
以上是使用 PATCH 請求方法編輯和更新註釋的詳細內容。更多資訊請關注PHP中文網其他相關文章!