alexgarrett / violin
Violin 是一个易于使用、高度可定制的 PHP 验证器。
Requires
- php: >=5.4
Requires (Dev)
- phpunit/phpunit: ~4.5
- squizlabs/php_codesniffer: 2.1.*
README
Violin 是一个易于使用、高度可定制的 PHP 验证器。
注意:此包正在积极开发中,不建议用于生产环境。
安装
使用 Composer 安装。
{ "require": { "alexgarrett/violin": "2.*" } }
基本用法
use Violin\Violin; $v = new Violin; $v->validate([ 'name' => ['billy', 'required'], 'age' => [20, 'required|int'] ]); if($v->passes()) { echo 'Validation passed, woo!'; } else { echo '<pre>', var_dump($v->errors()->all()), '</pre>'; }
添加自定义规则
添加自定义规则很简单。如果闭包返回 false,则规则失败。
$v->addRuleMessage('isbanana', 'The {field} field expects "banana", found "{value}" instead.'); $v->addRule('isbanana', function($value, $input, $args) { return $value === 'banana'; }); $v->validate([ 'fruit' => ['apple', 'isbanana'] ]);
添加自定义错误消息
您可以添加规则消息或字段消息以实现最大灵活性。
添加规则消息
$v->addRuleMessage('required', 'You better fill in the {field} field, or else.');
批量添加规则消息
$v->addRuleMessages([ 'required' => 'You better fill in the {field} field, or else.', 'int' => 'The {field} needs to be an integer, but I found {value}.', ]);
添加字段消息
您添加的字段消息将优先于任何默认或自定义规则消息。
$v->addFieldMessage('username', 'required', 'You need to enter a username to sign up.');
批量添加字段消息
$v->addFieldMessages([ 'username' => [ 'required' => 'You need to enter a username to sign up.' ], 'age' => [ 'required' => 'I need your age.', 'int' => 'Your age needs to be an integer.', ] ]);
使用字段别名
字段别名可以帮助您格式化任何错误消息,而不需要显示奇怪表单名称或创建自定义错误。
$v->validate([ 'username_box|Username' => ['' => 'required'] ]); // Error output: "Username is required."
回调
Violin 允许您在验证前后附加回调。如果您需要执行进一步的验证或触发事件,这可能很有用。您可以添加任意数量的“之前”和“之后”回调,并可以在其中使用当前的 Violin 实例。
示例
$v->before(function($violin) { // This will happen before the validation.. });
$v->after(function($violin) { // This will happen after the validation.. });
扩展 Violin
您可以通过扩展 Violin 类来添加自定义规则、规则消息和字段消息。这样,如果您有任何依赖项(如数据库连接或语言文件),您可以保持类整洁以处理自定义验证。
class MyValidator extends Violin { protected $db; public function __construct(PDO $db) { $this->db = $db; // Add rule message for custom rule method. $this->addRuleMessage('uniqueUsername', 'That username is taken.'); } // Custom rule method for checking a unique username in our database. // Just prepend custom rules with validate_ public function validate_uniqueUsername($value, $input, $args) { $user = $this->db->prepare(" SELECT count(*) as count FROM users WHERE username = :username "); $user->execute(['username' => $value]); if($user->fetchObject()->count) { return false; // Username exists, so return false. } return true; } } // A database connection. $db = new PDO('mysql:host=127.0.0.1;dbname=website', 'root', 'root'); // Instantiate your custom class with dependencies. $v = new MyValidator($db); $v->validate([ 'username' => ['billy', 'required|uniqueUsername'] ]);
规则
以下规则列表正在开发中。当然,如果您想为基规则集添加更多规则,您始终可以为此项目做出贡献。
alnum
如果值是字母数字。
alnumDash
如果值是字母数字。允许使用破折号和下划线。
alpha
如果值仅是字母。
array
如果值是数组。
between(int, int)
检查值是否在定义的区间内。此检查包含等号,因此5位于5和10之间。
布尔值
如果值是布尔值。
电子邮件
如果值是有效的电子邮件。
整数
如果值是整数,包括字符串中的数字。1和'1'都被归类为整数。
数字
如果值是数字,包括字符串中的数字。
数值字符串由可选的符号、任意数量的数字、可选的小数部分和可选的指数部分组成。因此+0123.45e6是一个有效的数值。十六进制(例如0xf4c3b00c)、二进制(例如0b10100111001)、八进制(例如0777)表示法也是允许的,但只能不包含符号、小数和指数部分。
IP地址
如果值是有效的IP地址。
min(int, [number])
检查字符串长度是否大于或等于给定的int
。要检查数字的大小,请传递可选的number
选项。
$v->validate([ 'username' => ['billy', 'required|min(3)|max(20)'], 'age' => ['20', 'required|min(18, number)|max(100, number)'] ]);
max(int, [number])
检查字符串长度是否小于或等于给定的int
。要检查数字的大小,请传递可选的number
选项。
required
如果值存在。
URL
如果值格式化为有效的URL。
matches(field)
检查一个给定的输入是否与另一个输入匹配。例如,检查密码是否与密码确认匹配。
日期
如果给定输入是有效的日期。
您可以验证可读的日期,如'25th October 1961'和DateTime
实例。例如
$twoDaysAgo = new DateTime('2 days ago'); $date = $twoDaysAgo->format('d M Y'); $v->validate([ 'date' => [$date, 'required|date'] ]);
checked
如果一个字段已经被'checked'或没有,这意味着它包含以下值之一:'yes'、'on'、'1'、1、true或'true'。这可以用来确定HTML复选框是否已被选中。
regex(expression)
如果给定输入与给定的正则表达式匹配。
贡献
请在GitHub上提交问题,或者如果您想直接贡献,请提交pull request。
运行测试
测试使用phpunit运行。运行./vendor/bin/phpunit
以运行测试。