首頁 > 後端開發 > php教程 > 使用 PATCH 請求方法編輯和更新註釋

使用 PATCH 請求方法編輯和更新註釋

WBOY
發布: 2024-07-17 12:25:51
原創
406 人瀏覽過

Editing and Updating Notes using PATCH Request Method

作為使用表單和請求方法建立新筆記的後續操作,我們現在將探索如何使用 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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板