xphoenyx / valify
一个用于用户输入验证的小型框架
Requires
- php: >=5.4.0
Requires (Dev)
- phpunit/phpunit: 4.0.*
README
注意!此项目已归档,因此不再维护
Valify
一个用于用户输入验证的小型框架。它仍在开发中,因此请关注提交。灵感来自 Yii2 输入验证实现。
要求
您需要 PHP 5.4 来运行此代码。
安装
下载源代码后,将以下代码添加到将要验证数据所在的文件中
require 'valify/Validator.php'; $validator = new Validator();
框架使用命名空间,因此请将以下行添加到调用验证器的文件顶部
use valify\Validator;
还有通过 composer 安装此框架的更直接的方法。在项目根目录中,在终端中输入以下命令
php composer.phar require xphoenyx/valify 1.*
现在您可以为您的数据验证做准备。
MVC 模式用户提示
您可以在基础模型类中实现自己的方法。请参考以下示例
use valify\Validator; class Model { /* ... */ protected $validator; // Your rules public $rules = []; // Here is stored $_POST, for example public $data = []; function __construct() { /* ... */ $this->validator = new Validator(); /* ... */ } /* * Your other methods */ public function validate() { return $this->validator ->setRules($this->rules) ->loadData($this->data) ->validate(); } public function getErrors() { return $this->validator->getErrors(); } }
使用方法
使用方法类似于 Yii2 输入验证。
定义规则
$rules = [ [['username', 'password'], 'string', 'max'=>10], ['email', 'email', 'message'=>'Please provide a valid email'], ['remember_me', 'boolean'] /* ... */ ];
每个验证器都接受 message
参数,它应包含错误信息字符串。您可以通过所谓的 'patterns' 在 message
中访问属性名称及其值
['email', 'email', 'message'=>'{value} for attribute "{attribute}" is not a valid email'],
注意!如果值不能表示为字符串,则将显示值类型而不是值本身
您还可以通过扩展 valify\validator\AbstractValidator
类来实现自己的验证器。在这种情况下,如果您不使用 composer 自动加载器,则还应导入(require)AbstractValidator。要在规则中使用自己的验证器,只需将验证器命名空间定义为验证器名称
$rules = [ /* ... */ ['email', '\\examples\\ExampleValidator', 'ownProperty'=>'abc' /* ... */] /* ... */ ];
确保在定义规则中的命名空间之前加载您的验证器。有关详细实现信息,请参阅 valify\validators\ExampleValidator
。
定义要验证的数据
期望输入数据具有以下格式
$data = [ 'username'=>'username', 'password'=>'123qwe', 'email'=>'address@gmail.com', 'remember_me'=>'1', /* ... */ ];
设置规则和数据
$validator = new Validator(); $validator = $validator->setRules($rules)->loadData($data)
您可以多次调用 setrules()
和 loadData()
。
$validator = new Validator(); $validator = $validator ->setRules([...]) ->loadData([...]) ->setRules([...]) ->setRules([...]) ->loadData([...]) ->loadData([...]);
执行验证
$isValid = $validator->validate();
您可以在不调用 setRules()
和 loadData()
的情况下执行单个值验证
$password = $_POST['password']; $isValid = Validator::validateFor('string', $password, ['min'=>6, 'max'=>20]);
对于多个值验证,将所需值的数组作为第二个参数传递
$values = [ $_POST['username'], $_POST['first_name'], $_POST['password'], ]; $isValid = Validator::validateFor('string', $values, ['min'=>3, 'max'=>30]);
validateFor()
将返回一个包含两个属性的对象
isValid
- 包含布尔值;lastError
- 包含最后的验证错误信息;errors
- 包含验证属性时整个错误信息堆栈;
获取错误信息
if($validator->hasErrors()) { $errorMsgs = $validator->getErrors(); }
您还可以获取单个属性的错误信息
$errorMsgForUserAttr = $validator->getError('username');
由于每个属性可能包含几个错误信息,getError()
将返回相应属性错误堆栈(数组)中的最后一条信息。
内置验证器列表
- 布尔值
- 电子邮件
- 文件
- 必填
- 字符串
- 网址
- 电话
- 在...之内
- 数字
- 比较
- 唯一
有关每个验证器的详细参数描述,请参阅 valify/validators 中的类方法。
测试
为了正确运行单元测试,您需要指定 composer 自动加载文件的路径。然后在 valify
(组件根目录)下终端中发出 phpunit
命令。
示例
查看 examples
目录中的 index.php,以查看框架的实际运行情况。
欢迎提交所有错误和问题报告以及改进建议。祝您使用愉快。