灵活运用 - 自定义验证类 ¶
作者:KK
发表日期:2016.10.25
以创建一个中国的手机号码验证器
为例子
第一步:创建验证器类 ¶
在你规划好的命名空间目录下创建一个类
我们起名为MobileValidator
吧,放在@app
这个别名目录下
继承yii\validators\Validator
第二步:实现验证方法 ¶
添加validateValue这个方法:
protected function validateValue($value){
if(preg_match('/^1[0-9]{10}$/', $value)){
return null;
}else{
return ['手机号验证器提示您,' . $value . ' 不是手机号', []];
}
}
其中$value就是要被验证是否为手机号的值
第三步:在模型里配置 ¶
在模型里声明rules和一个装载手机号的属性如下:
namespace app;
class TestForm extends \yii\base\Model{
public $phone = '';
public function rules(){
return [
['phone', 'app\MobileValidator'],
];
}
}
第四步:直接在控制器测试 ¶
$form = new \app\TestForm();
$form->phone = '1234567890';
$form->validate();
print_r($form->errors); //有手机号的报错
$form->phone = '13800138000';
$form->validate();
print_r($form->errors); //没有任何报错
第五步:自定义报错消息 ¶
yii\validators\Validator
本身已经有了一个叫$message
的属性,所以可以通过rules给验证器配置message:
public function rules(){
return [
['phone', 'yii\validators\MobileValidator', 'message' => '手机号格式不正确'],
];
}
可是这时候还不会生效,因为要在验证失败时返回这个消息才可以:
protected function validateValue($value){
if(preg_match('/^1[0-9]{10}$/', $value)){
return null;
}else{
$message = $this->message ? $this->message : '手机号校验失败';
return [$message, []];
}
}