php实现审批
PHP实现审批流程的方法
审批流程通常涉及用户提交申请、管理员审批、状态更新等步骤。以下是实现审批功能的几种方法。
数据库设计
创建数据表存储审批信息,字段包括申请ID、用户ID、审批状态、审批意见等。
CREATE TABLE approval_requests (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
content TEXT NOT NULL,
status ENUM('pending', 'approved', 'rejected') DEFAULT 'pending',
admin_id INT,
feedback TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
提交申请功能
用户提交申请时,将数据插入数据库。

$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
$stmt = $pdo->prepare("INSERT INTO approval_requests (user_id, content) VALUES (?, ?)");
$stmt->execute([$userId, $content]);
审批功能实现
管理员审批时更新状态和意见。
$stmt = $pdo->prepare("UPDATE approval_requests SET status = ?, admin_id = ?, feedback = ? WHERE id = ?");
$stmt->execute([$status, $adminId, $feedback, $requestId]);
状态查询
用户或管理员查询审批状态。

$stmt = $pdo->prepare("SELECT * FROM approval_requests WHERE user_id = ?");
$stmt->execute([$userId]);
$requests = $stmt->fetchAll(PDO::FETCH_ASSOC);
邮件通知
审批状态变化时发送邮件通知用户。
if ($status == 'approved') {
mail($userEmail, "审批通过", "您的申请已通过审批");
} else if ($status == 'rejected') {
mail($userEmail, "审批拒绝", "您的申请被拒绝,原因:" . $feedback);
}
使用工作流引擎
对于复杂审批流程,可使用工作流引擎如Symfony Workflow组件。
use Symfony\Component\Workflow\Workflow;
use Symfony\Component\Workflow\DefinitionBuilder;
use Symfony\Component\Workflow\MarkingStore\SingleStateMarkingStore;
$definition = (new DefinitionBuilder())
->addPlaces(['draft', 'review', 'approved', 'rejected'])
->addTransition('to_review', 'draft', 'review')
->addTransition('approve', 'review', 'approved')
->addTransition('reject', 'review', 'rejected')
->build();
$workflow = new Workflow($definition, new SingleStateMarkingStore('status'));
权限控制
确保只有管理员能执行审批操作。
if (!isAdmin($currentUser)) {
header("HTTP/1.1 403 Forbidden");
exit("无权访问");
}
以上方法可根据实际需求组合使用,构建完整的审批系统。






