Typecho表单验证进阶:为插件和主题添加自定义addRule验证规则
🌐 我的个人网站:乐乐主题创作室
引言
在Typecho插件和主题开发过程中,表单验证是保证数据安全和完整性的重要环节。Typecho提供了内置的表单验证机制,但开发者经常需要扩展这些验证规则以满足特定需求。本文将深入探讨如何为Typecho的表单系统添加自定义的addRule
验证规则,从基础实现到高级应用场景。
一、Typecho表单验证基础
1.1 Typecho表单系统概述
Typecho的表单系统基于Typecho_Widget_Helper_Form
类构建,它提供了一套完整的表单生成和验证机制。默认情况下,Typecho已经内置了一些常用的验证规则:
// 内置验证类型示例
$input = new Typecho_Widget_Helper_Form_Element_Text(
'username',
NULL,
NULL,
_t('用户名'),
_t('用户名将作为您的唯一标识')
);
$input->addRule('required', _t('必须填写用户名'));
$input->addRule('maxLength', _t('用户名最多包含32个字符'), 32);
1.2 addRule方法解析
addRule
方法的签名如下:
/**
* 添加验证规则
*
* @param string $name 规则名称
* @param string $message 错误提示信息
* @param mixed $parameter 验证参数
* @param string $type 验证类型(break|continue)
* @param integer $priority 验证优先级
* @return Typecho_Widget_Helper_Form_Element
*/
public function addRule($name, $message, $parameter = NULL, $type = 'break', $priority = 1)
二、自定义验证规则实现
2.1 创建自定义验证类
要扩展验证规则,我们需要创建一个继承自Typecho_Validate
的类:
class Custom_Validate extends Typecho_Validate
{
/**
* 验证手机号码格式
*
* @param string $value 待验证的值
* @param string $parameter 验证参数(可空)
* @return boolean
*/
public static function isMobile($value, $parameter)
{
return preg_match("/^1[3-9]\d{9}$/", $value);
}
/**
* 验证字符串是否为纯中文
*
* @param string $value 待验证的值
* @param string $parameter 验证参数(可空)
* @return boolean
*/
public static function isChinese($value, $parameter)
{
return preg_match("/^[\x{4e00}-\x{9fa5}]+$/u", $value);
}
}
2.2 注册自定义验证规则
在插件或主题的初始化阶段,需要将自定义验证类注册到Typecho的验证系统中:
Typecho_Validate::addRule('isMobile', array('Custom_Validate', 'isMobile'));
Typecho_Validate::addRule('isChinese', array('Custom_Validate', 'isChinese'));
2.3 使用自定义验证规则
注册后,就可以像内置规则一样使用这些自定义规则了:
$mobile = new Typecho_Widget_Helper_Form_Element_Text(
'mobile',
NULL,
NULL,
_t('手机号码'),
_t('请输入有效的手机号码')
);
$mobile->addRule('isMobile', _t('请输入有效的手机号码'));
$realname = new Typecho_Widget_Helper_Form_Eleme