CakePHP中的数据校验

CakePHP ORM 使用两个层级的数据校验,第一个层级为 Validation,该层级用来校验基本的数据类型及格式;第二个层级为 Application Rules,该层级主要校验有状态的实体属性。 For example, validation rules could ensure that an email address is valid, while an application rule could ensure that the email address is unique.

Validation

在数据转化为Entity类时,校验数据类型及格式。
该部分的校验规则默认定义在Table类的 validationDefault() 方法中,该方法返回一个 Cake\Validation\Validator 对象。另外可以自行定义额外的校验方法(格式如:validationXXX),并在Model的 newEntity()patchEntity() 方法中进行指定具体使用哪个校验方法,当然也可以指定不进行校验。
使用 getErrors() 方法获取校验错误信息。

$data = [
    'title' => '文章标题',
    'content' => '这里是文章内容 ...'
];

$article = $this->Articles->newEntity($data, [
    'validate' => false //不进行校验
]);

if($article->getErrors()) { //获取错误信息
    var_dump($article->getErrors());
}

Application Rules

在保存或删除数据时,应用系统级校验规则。
该部分校验规则默认定义在Table类的 buildRulers() 方法中,该方法返回一个 Cake\ORM\RulesChecker 对象。
在执行 save()delete() 方法时,该部分校验规则被应用,也可以自行禁用。

//禁用系统校验规则
$articles->save($article, ['checkRules' => false]);

使用 getErrors() 方法获取校验错误信息。

常用的系统校验场景包括:

字段唯一性校验,包括单一字段和多个字段的联合校验。

// A single field.
$rules->add($rules->isUnique(['email']));

// A list of fields
$rules->add($rules->isUnique(
    ['username', 'account_id'],
    'This username & account_id combination has already been used.' //自定义错误信息
));

外键校验,该外键的值必须在主表中存在。

// A single field.
$rules->add($rules->existsIn('article_id', 'Articles'));

// Multiple keys, useful for composite primary keys.
$rules->add($rules->existsIn(['site_id', 'article_id'], 'Articles'));

关联统计校验,来限定关联数据的条数。

// In the ArticlesTable.php file
// Between 3 and 5 tags
$rules->add($rules->validCount('tags', 3, '>=', 'You must have at least 3 tags'));
$rules->add($rules->validCount('tags', 5, '<=', 'You must have at most 5 tags'));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值