我们经常写api接口,接收的参数需要经过过滤和验证才能使用。我们可以利用phalcon的验证器封装一个批量添加规则的。
1、在common下创建Validate.php文件
<?php
/**
* @desc 验证器
* @author zhaoyang
* @date 2018年5月11日 下午4:16:50
*/
namespace Common;
use Phalcon\Validation;
use Phalcon\Validation\Exception;
class Validate extends Validation {
// 自定义的验证类型
protected static $types = [
// Check for alphanumeric character(s)
'alnum' => [
'validator' => 'Phalcon\\Validation\\Validator\\Alnum'
],
// Check for alphabetic character(s)
'alpha' => [
'validator' => 'Phalcon\\Validation\\Validator\\Alpha'
],
// Validates that a value is between an inclusive range of two values.
'between' => [
'validator' => 'Phalcon\\Validation\\Validator\\Between'
],
// Calls user function for validation
'callback' => [
'validator' => 'Phalcon\\Validation\\Validator\\Callback'
],
// Checks that two values have the same value
'confirmation' => [
'validator' => 'Phalcon\\Validation\\Validator\\Confirmation'
],
// Checks if a value has a valid credit card number
'creditcard' => [
'validator' => 'Phalcon\\Validation\\Validator\\CreditCard'
],
// Checks if a value is a valid date
'date' => [
'validator' => 'Phalcon\\Validation\\Validator\\Date'
],
// Check for numeric character(s)
'digit' => [
'validator' => 'Phalcon\\Validation\\Validator\\Digit'
],
// Checks if a value has a correct e-mail format
'email' => [
'validator' => 'Phalcon\\Validation\\Validator\\Email'
],
// Check if a value is not included into a list of values
'exclusionin' => [
'validator' => 'Phalcon\\Validation\\Validator\\ExclusionIn'
],
// Checks if a value has a correct file
'file' => [
'validator' => 'Phalcon\\Validation\\Validator\\File'
],
// Checks if a value is identical to other
'identical' => [
'validator' => 'Phalcon\\Validation\\Validator\\Identical'
],
// Check if a value is included into a list of values
'inclusionin' => [
'validator' => 'Phalcon\\Validation\\Validator\\InclusionIn'
],
// Check for a valid numeric value
'numericality' => [
'validator' => 'Phalcon\\Validation\\Validator\\Numericality'
],
// Validates that a value is not null or empty string
'presenceof' => [
'validator' => 'Phalcon\\Validation\\Validator\\PresenceOf'
],
// Allows validate if the value of a field matches a regular expression
'regex' => [
'validator' => 'Phalcon\\Validation\\Validator\\Regex'
],
// Validates that a string has the specified maximum and minimum constraints
'stringlength' => [
'validator' => 'Phalcon\\Validation\\Validator\\StringLength'
],
// Check that a field is unique in the related table
'uniqueness' => [
'validator' => 'Phalcon\\Validation\\Validator\\Uniqueness'
],
// Checks if a value has a url format
'url' => [
'validator' => 'Phalcon\\Validation\\Validator\\Url'
]
];
/**
* <pre>
* 基本格式
* [
* [验证字段1,验证类型[,错误提示,验证规则,验证条件,其他参数],
* [验证字段2,验证类型[,错误提示,验证规则,验证条件,其他参数],
* ]
*
**************************************************************************************************
*
* 验证字段:
* 通常为字段名,如果使用了映射,须与映射相对应,验证字段可以为数组(多个字段)
* 例:[['username', 'age'], 'presenceof', ['username'=>'用户名不能为空','age'=>'年龄不能为空']]
*
* 支持的验证类型有(默认为regex):
* 常用:regex(正则)、presenceof(不能为null or '')、uniqueness(唯一)、inclusionin(在...之中)、uniqueness(检查一个字段在相关表中是惟一的【模型中使用】)
* 全部:alnum(字母数字)、alpha(字母)、between、callback、confirmation、creditcard、date、digit(数字)、email、exclusionin、file、identical(检查一个值与指定固定值是否相同)、inclusionin、numericality、presenceof、regex、stringlength、uniqueness、url
*
* 错误提示:
* 为字符串,多条错误提示信息用"|"分割,例如stringlength类型的验证,允许为空,为空启用默认提示
*
* 验证规则:
* 额外的验证规则(为验证类型提供必要的参数)
*
* 验证条件 (默认为0):
* 1表示必须验证,0表示存在即验证
*
* 其他参数:
* 验证类型需要的其他参数(详见下面详细说明)
* 默认所有的验证器都会被执行,不管验证成功与否。 我们可以通过设置 cancelOnFail 参数为 true 来指定某个验证器验证失败时中止以后的所有验证
* 例如把其他参数设为['cancelOnFail' => true],表示失败后停止验证后面条件
*
**************************************************************************************************
*
* 详细说明:
* 当验证类型为:alnum、alpha、creditcard、digit、email、numericality、url
* 必须验证:[验证字段,验证类型[,错误提示,'',1]] or 存在则验证:[验证字段,验证类型[,错误提示]]
* 例:['username', 'alnum', '用户名必须为数字字母', '', 1] 表示必须验证用户名且必须为数字字母
*
* 当验证类型为:between
* [验证字段,验证类型,错误提示,验证规则[,验证条件]] 注:验证规则为数组[最小值,最大值],例:[5,12]
* 例:['age', 'between', '年龄必须在0-150岁之间', [0,150]]
* 注:请特别注意null、''等值,因为是直接用>和<进行比较,如果区间有0存在,建议增加一个presenceof验证
*
* 当验证类型为:callback
* [验证字段,验证类型,错误提示,验证规则[,验证条件]] 注:验证规则为匿名函数
* 例:
* 在控制器中调用验证器的validate(var data = null, var entity = null)方法时,传递的是第一个参数,
* 可以简单理解为:数据源如果是数组,则匿名函数的形参$data也是数组
* ['age', 'callback', '年龄必须小于200', function($data){return isset($data['age']) && $data['age']<200 ? true:false; },1]
*
* 在模型中,调用的是模型中的validate(<ValidationInterface> validator)方法
* 而该模型方法中调用验证器的validate(var data = null, var entity = null)方法时传递的是validate(null, $this),即传递的是当前模型对象
* 所以可以简单理解为:模型中验证的数据源是模型对象,所以匿名函数的形参$data为对象
* ['age', 'callback', '年龄必须小于210', function($data){$age = $da