首页 >后端开发 >php教程 >使用 PATCH 请求方法编辑和更新注释

使用 PATCH 请求方法编辑和更新注释

WBOY
WBOY原创
2024-07-17 12:25:51401浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn