Yii2.0模型层数据验证和thinkPHP3.2框架模型层数据验证对比

本文对比了Yii2.0和thinkPHP3.2框架在模型层的数据验证机制,包括声明规则、自定义错误信息、验证事件、条件式验证和处理空输入等方面,探讨了两者在数据预处理和验证时间选择上的差异。
摘要由CSDN通过智能技术生成


Yii2.0模型层数据验证


一般说来,程序猿永远不应该信任从最终用户直接接收到的数据,并且使用它们之前应始终先验证其可靠性。要给model填充其所需的用户输入数据,你可以调用 yii\base\Model::validate() 方法验证它们。该方法会返回一个布尔值,指明是否通过验证。若没有通过,你能通过 yii\base\Model::errors 属性获取相应的报错信息。比如

$model = new \app\models\ContactForm;

	// 用用户输入来填充模型的特性
	$model->attributes = \Yii::$app->request->post('ContactForm');

	if ($model->validate()) {
   	 // 若所有输入都是有效的
	} else {
   	 // 有效性验证失败:$errors 属性就是存储错误信息的数组
    		$errors = $model->errors;
	}

声明规则(Rules) 

要让 validate() 方法起作用,你需要声明与需验证模型特性相关的验证规则。为此,需要重写 yii\base\Model::rules() 方法。下面的例子展示了如何声明   用于验证 ContactForm 模型的相关验证规则:

public function rules()
{
    return [
        // name,email,subject 和 body 特性是 `require`(必填)的
        [['name', 'email', 'subject', 'body'], 'required'],

        // email 特性必须是一个有效的 email 地址
        ['email', 'email'],
    ];
}

yii\base\Model::rules() 方法应返回一个由规则所组成的数组,每一个规则都呈现为以下这类格式的小数组:

[
    // 必须项,用于指定那些模型特性需要通过此规则的验证。
    // 对于只有一个特性的情况,可以直接写特性名,而不必用数组包裹。
    ['attribute1', 'attribute2', ...],

    // 必填项,用于指定规则的类型。
    // 它可以是类名,验证器昵称,或者是验证方法的名称。
    'validator',

    // 可选项,用于指定在场景(scenario)中,需要启用该规则
    // 若不提供,则代表该规则适用于所有场景
    // 若你需要提供除了某些特定场景以外的所有其他场景,你也可以配置 "except" 选项
    'on' => ['scenario1', 'scenario2', ...],

    // 可选项,用于指定对该验证器对象的其他配置选项
    'property1' => 'value1', 'property2' => 'value2', ...
]

对于每个规则,你至少需要指定该规则适用于哪些特性,以及本规则的类型是什么。你可以指定以下的规则类型之一:

  • 核心验证器的昵称,比如 requiredindate,等等。请参考点击打开链接
  • 模型类中的某个验证方法的名称,或者一个匿名方法。请参考行内验证器小节了解更多。
  • 验证器类的名称。请参考独立验证器小节了解更多。

一个规则可用于验证一个或多个模型特性,且一个特性可以被一个或多个规则所验证。一个规则可以施用于特定场景(scenario),只要指定 on 选项。如果你不指定 on 选项,那么该规则会适配于所有场景。

当调用 validate() 方法时,它将运行以下几个具体的验证步骤:

  1. 检查从声明自 yii\base\Model::scenarios() 方法的场景中所挑选出的当前yii\base\Model::scenario的信息,从而确定出那些特性需要被验证。这些特性被称为激活特性。
  2. 检查从声明自 yii\base\Model::rules() 方法的众多规则中所挑选出的适用于当前yii\base\Model::scenario的规则,从而确定出需要验证哪些规则。这些规则被称为激活规则。
  3. 用每个激活规则去验证每个与之关联的激活特性。

基于以上验证步骤,有且仅有声明在 scenarios() 方法里的激活特性,且它还必须与一或多个声明自 rules() 里的激活规则相关联才会被验证。

自定义错误信息 

大多数的验证器都有默认的错误信息,当模型的某个特性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值