php 实现短信模板
实现短信模板的方法
在PHP中实现短信模板功能通常涉及模板的存储、变量替换和发送逻辑。以下是常见的实现方式:
使用字符串替换
最简单的短信模板可以通过字符串替换实现:
$template = "尊敬的{name},您的验证码是{code},有效期{minutes}分钟。";
$data = [
'name' => '张三',
'code' => '123456',
'minutes' => 5
];
$message = str_replace(
array_map(fn($key) => '{'.$key.'}', array_keys($data)),
array_values($data),
$template
);
数据库存储模板
将短信模板存储在数据库中更便于管理:
CREATE TABLE sms_templates (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
content TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
查询并使用模板:
$templateId = 1; // 验证码模板ID
$template = $db->query("SELECT content FROM sms_templates WHERE id = $templateId")->fetchColumn();
$data = ['code' => '654321', 'minutes' => 10];
$message = preg_replace_callback('/\{(\w+)\}/', function($matches) use ($data) {
return $data[$matches[1]] ?? $matches[0];
}, $template);
使用Twig模板引擎
对于复杂模板,可以使用Twig等模板引擎:
require_once 'vendor/autoload.php';
$loader = new \Twig\Loader\ArrayLoader([
'sms' => 'Hello {{ name }}, your code is {{ code }}!',
]);
$twig = new \Twig\Environment($loader);
echo $twig->render('sms', ['name' => 'John', 'code' => '7890']);
短信模板类封装
封装一个短信模板处理类:
class SmsTemplate {
private $db;
private $templates = [];
public function __construct(PDO $db) {
$this->db = $db;
}
public function getMessage($templateId, array $data) {
if (!isset($this->templates[$templateId])) {
$stmt = $this->db->prepare("SELECT content FROM sms_templates WHERE id = ?");
$stmt->execute([$templateId]);
$this->templates[$templateId] = $stmt->fetchColumn();
}
return preg_replace_callback('/\{(\w+)\}/', function($matches) use ($data) {
return $data[$matches[1]] ?? $matches[0];
}, $this->templates[$templateId]);
}
}
国际化和多语言支持
对于多语言短信模板:
$templates = [
'en' => [
'verification' => 'Your verification code is {code}'
],
'zh' => [
'verification' => '您的验证码是{code}'
]
];
function getSmsMessage($lang, $templateName, $data) {
global $templates;
$template = $templates[$lang][$templateName] ?? $templates['en'][$templateName];
return str_replace(
array_map(fn($k) => '{'.$k.'}', array_keys($data)),
array_values($data),
$template
);
}
短信发送集成
结合短信发送API:

function sendSms($phone, $templateId, $data) {
$db = new PDO('mysql:host=localhost;dbname=sms', 'user', 'pass');
$template = new SmsTemplate($db);
$message = $template->getMessage($templateId, $data);
$api = new SmsApi('your_api_key');
return $api->send([
'phone' => $phone,
'message' => $message
]);
}
这些方法可以根据项目需求进行组合和扩展,实现灵活高效的短信模板功能。






