PHP 怎么PHP HTMX

wen PHP项目 2

本文目录导读:

PHP 怎么PHP HTMX

  1. 什么是 HTMX?
  2. 基本用法
  3. 常用 HTMX 属性
  4. 高级用法
  5. 完整示例:任务管理系统
  6. 注意事项

我来给你详细讲解 PHP 和 HTMX 的结合使用,这是目前很流行的前后端交互方式。

什么是 HTMX?

HTMX 是一个轻量级的 JavaScript 库,允许你在 HTML 中直接使用属性来发送 AJAX 请求,无需编写复杂的 JavaScript 代码。

基本用法

引入 HTMX

<script src="https://unpkg.com/htmx.org@1.9.10"></script>

基础示例

前端 HTML (index.php):

<!DOCTYPE html>
<html>
<head>
    <script src="https://unpkg.com/htmx.org@1.9.10"></script>
</head>
<body>
    <!-- 点击按钮发送 GET 请求 -->
    <button hx-get="get-time.php" hx-target="#result">
        获取时间
    </button>
    <div id="result"></div>
</body>
</html>

后端 PHP (get-time.php):

<?php
// 返回 HTML 片段
echo '<p>当前时间:' . date('Y-m-d H:i:s') . '</p>';
?>

常用 HTMX 属性

表单提交

前端:

<form hx-post="save-user.php" hx-target="#message">
    <input type="text" name="name" placeholder="姓名">
    <input type="email" name="email" placeholder="邮箱">
    <button type="submit">保存</button>
</form>
<div id="message"></div>

后端 PHP:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $name = $_POST['name'] ?? '';
    $email = $_POST['email'] ?? '';
    // 处理数据...
    // 返回反馈信息
    echo '<div class="alert alert-success">用户 ' . $name . ' 保存成功!</div>';
}
?>

实时搜索

前端 HTML:

<input type="search" 
       name="search" 
       placeholder="输入搜索..."
       hx-get="search.php" 
       hx-trigger="keyup changed delay:300ms" 
       hx-target="#search-results">
<div id="search-results"></div>

后端 PHP (search.php):

<?php
$search = $_GET['search'] ?? '';
// 模拟数据库查询
$users = ['张三', '李四', '王五', '赵六', '孙七'];
$results = array_filter($users, function($user) use ($search) {
    return str_contains($user, $search);
});
if (empty($results)) {
    echo '<p>没有找到结果</p>';
} else {
    foreach ($results as $user) {
        echo '<div>' . htmlspecialchars($user) . '</div>';
    }
}
?>

高级用法

加载指示器

<button hx-get="load-content.php" hx-target="#content" 
        hx-indicator="#loading">
    加载内容
</button>
<div id="loading" class="htmx-indicator">
    加载中...
</div>

CSS 样式:

.htmx-indicator {
    display: none;
}
.htmx-request .htmx-indicator {
    display: block;
}

无限滚动

<div hx-get="more-posts.php" hx-trigger="revealed" hx-target="this" hx-swap="afterend">
    <!-- 当前内容 -->
</div>

带确认的删除

<button hx-delete="delete-user.php?id=1" 
        hx-confirm="确定要删除吗?"
        hx-target="closest tr">
    删除
</button>

JSON 数据处理

<?php
// 设置响应头
header('Content-Type: application/json');
// 返回 JSON
echo json_encode(['status' => 'success', 'message' => '操作成功']);
?>

完整示例:任务管理系统

index.php:

<!DOCTYPE html>
<html>
<head>
    <script src="https://unpkg.com/htmx.org@1.9.10"></script>
    <style>
        .task-item { margin: 10px 0; }
        .completed { text-decoration: line-through; }
    </style>
</head>
<body>
    <h1>任务列表</h1>
    <!-- 添加任务表单 -->
    <form hx-post="add-task.php" hx-target="#task-list" hx-swap="afterbegin">
        <input type="text" name="task" placeholder="输入新任务" required>
        <button type="submit">添加</button>
    </form>
    <!-- 任务列表 -->
    <div id="task-list" hx-get="get-tasks.php" hx-trigger="load">
        <!-- 任务将在这里显示 -->
    </div>
</body>
</html>

add-task.php:

<?php
session_start();
$task = htmlspecialchars($_POST['task'] ?? '');
$task_id = uniqid();
// 添加到 session 数组(模拟数据库)
$_SESSION['tasks'][$task_id] = $task;
// 返回新任务 HTML
echo '<div class="task-item" id="task-' . $task_id . '">
    <span>' . $task . '</span>
    <button hx-delete="delete-task.php?id=' . $task_id . '" 
            hx-target="#task-' . $task_id . '" 
            hx-swap="outerHTML">删除</button>
</div>';
?>

get-tasks.php:

<?php
session_start();
$tasks = $_SESSION['tasks'] ?? [];
if (empty($tasks)) {
    echo '<p>暂无任务</p>';
    return;
}
foreach ($tasks as $id => $task) {
    echo '<div class="task-item" id="task-' . $id . '">
        <span>' . $task . '</span>
        <button hx-delete="delete-task.php?id=' . $id . '" 
                hx-target="#task-' . $id . '" 
                hx-swap="outerHTML">删除</button>
    </div>';
}
?>

delete-task.php:

<?php
session_start();
$id = $_GET['id'] ?? '';
if (isset($_SESSION['tasks'][$id])) {
    unset($_SESSION['tasks'][$id]);
}
?>
<!-- 返回空内容 -->

注意事项

  1. 安全性:始终使用 htmlspecialchars() 处理用户输入
  2. 数据验证:在 PHP 端始终进行数据验证
  3. 错误处理:使用 HTMX 的 hx-on-error 处理错误情况
<div hx-get="api.php" hx-trigger="load" hx-on-error="alert('发生错误')">
</div>
  1. CSRF 防护:在处理 POST 请求时添加 CSRF token
<form hx-post="add-task.php" hx-target="#task-list">
    <input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
    <!-- 其他字段 -->
</form>

HTMX 和 PHP 配合使用非常简洁高效,尤其适合小型到中型的 Web 应用,它大大减少了前后端分离架构中大量 JavaScript 代码的复杂性。

抱歉,评论功能暂时关闭!