Phalcon搭建多模块框架八:增加验证器批量添加验证规则方法并在控制器中使用

本文介绍如何在Phalcon框架下构建多模块应用,重点在于创建一个验证器来批量添加验证规则,并在控制器中进行实际使用,确保API接口接收到的数据经过有效过滤和验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们经常写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 = $data->age; return $age<210 ? true:false; //return $data->checkAge();}]
     *
     * 当验证类型为:confirmation
     * [验证字段,验证类型,错误提示,要与之比较的属性名[,验证条件]]
     * ['password', 'confirmation', '两次密码必须一致', 'confirmPassword'] 表示password存在时验证两次密码是否一致
     * 
     * 当验证类型为:date
     * [验证字段,验证类型,错误提示,日期格式[,验证条件]]  注:  日期格式为date()函数的相关参数,例:'Y-m-d H:i:s'
     * 例:['start_time', 'date', '开始时间格式错误', 'Y-m-d H:i:s']
     * 
     * 当验证类型为:exclusionin、inclusionin
     * [验证字段,验证类型,错误提示,验证规则[,验证条件]] 注:验证规则为数组,例:[1,2,'a']
     * 例:['status', 'inclusionin', '状态必须
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值