包 | system.validators |
---|---|
继承 | class CTypeValidator » CValidator » CComponent |
源自 | 1.0 |
版本 | $Id: CTypeValidator.PHP 3515 2011-12-28 12:29:24Z mDOMba $ |
源码 |
CTypeValidator验证属性的类型是否为type所指定的类型.
以下数据类型受到支持:
对于date类型,需要使用dateFormat 来确定日期字符串的解析方式。如果给定的日期值与预期 的格式不匹配,此属性将不能通过验证。
从1.1.7版开始,我们有了一个专用的日期验证器CDateValidator, 请考虑使用该验证器来验证一个日期类型的值。
当使用message属性定义一个自定义错误提示信息时, 可以在其中包含额外的占位符,占位符可以被实际内容替换。除了所有 验证器均可识别的 "{attribute}" 占位符(参见CValidator)外, CTypeValidator还允许指定下列占位符:
以下数据类型受到支持:
- integer有符号整数。
- float双精度浮点数。
- string字符串。
- array数组。
- date日期型。
- time时间型。
- datetime日期时间型。
对于date类型,需要使用dateFormat 来确定日期字符串的解析方式。如果给定的日期值与预期 的格式不匹配,此属性将不能通过验证。
从1.1.7版开始,我们有了一个专用的日期验证器CDateValidator, 请考虑使用该验证器来验证一个日期类型的值。
当使用message属性定义一个自定义错误提示信息时, 可以在其中包含额外的占位符,占位符可以被实际内容替换。除了所有 验证器均可识别的 "{attribute}" 占位符(参见CValidator)外, CTypeValidator还允许指定下列占位符:
- {type}: 使用属性所期望的类型type替换。
公共属性
属性 | 类型 | 描述 | 定义在 |
---|---|---|---|
allowEmpty | boolean | 是否此属性值允许为null或empty。默认值是true, 表示如果此属性值为空时它将通过验证。 | CTypeValidator |
attributes | array | 需要被验证的属性的列表。 | CValidator |
builtInValidators | array | 内置验证器列表 (name=>class) | CValidator |
dateFormat | string | 匹配日期格式的模板。默认值是 'MM/dd/yyyy'。 请参见CDateTimeParser以了解如何指定一个日期格式的更多细节。 仅当type设置为"date"时,这个值才会生效。 | CTypeValidator |
datetimeFormat | string | 匹配日期时间格式的模板。默认值是 'MM/dd/yyyy hh:mm'。 请参见CDateTimeParser以了解如何指定一个日期时间格式的更多细节。 仅当type设置为"datetime"时,这个值才会生效。 | CTypeValidator |
enableClientValidation | boolean | 是否执行客户端验证。默认值为true。 参见CActiveForm::enableClientValidation以了解更多关于客户端验证的细节。 | CValidator |
message | string | 用户自定义的错误提示信息。不同的验证器可以在该信息中 定义各种占位符(将被实际值替换)。占位符“{attribute}”可以被所有 验证器识别,它会被使用属性的标签来替换。 | CValidator |
on | array | 验证器将被应用到的情景模式的列表。 数组的键-值都是情景模式的名称。 | CValidator |
safe | boolean | 进行整块赋值是是否考虑此验证器中列出的属性的安全性。 默认值为true。 | CValidator |
skipOnError | boolean | 如果当前属性已经存在验证错误,这个验证规则 是否跳过。默认值是false。 | CValidator |
timeFormat | string | 匹配日期格式的模板。默认值是 'hh:mm'。 请参见CDateTimeParser以了解如何指定一个时间格式的更多细节。 仅当type设置为"time"时,这个值才会生效。 | CTypeValidator |
type | string | 属性值期望的数据类型。默认值是“string”。 有效的值包括 'string', 'integer', 'float', 'array', 'date', 'time' 和 'datetime'。 | CTypeValidator |
公共方法
方法 | 描述 | 定义在 |
---|---|---|
__call() | 如果类中没有调的方法名,则调用这个方法。 | CComponent |
__get() | 返回一个属性值、一个事件处理程序列表或一个行为名称。 | CComponent |
__isset() | 检查一个属性是否为null。 | CComponent |
__set() | 设置一个组件的属性值。 | CComponent |
__unset() | 设置一个组件的属性为null。 | CComponent |
applyTo() | 返回值指定此验证器是否应用到指定的情景模式。 | CValidator |
asa() | 返回这个名字的行为对象。 | CComponent |
attachBehavior() | 附加一个行为到组件。 | CComponent |
attachBehaviors() | 附加一个行为列表到组件。 | CComponent |
attachEventHandler() | 为事件附加一个事件处理程序。 | CComponent |
canGetProperty() | 确定属性是否可读。 | CComponent |
canSetProperty() | 确定属性是否可写。 | CComponent |
clientValidateAttribute() | 返回执行客户端验证所需的javascript脚本。 | CValidator |
createValidator() | 创建一个验证器对象。 | CValidator |
detachBehavior() | 从组件中分离一个行为。 | CComponent |
detachBehaviors() | 从组件中分离所有行为。 | CComponent |
detachEventHandler() | 分离一个存在的事件处理程序。 | CComponent |
disableBehavior() | 禁用一个附加行为。 | CComponent |
disableBehaviors() | 禁用组件附加的所有行为。 | CComponent |
enableBehavior() | 启用一个附加行为。 | CComponent |
enableBehaviors() | 启用组件附加的所有行为。 | CComponent |
evaLuateExpression() | 计算一个PHP表达式,或根据组件上下文执行回调。 | CComponent |
getEventHandlers() | 返回一个事件的附加处理程序列表。 | CComponent |
hasEvent() | 确定一个事件是否定义。 | CComponent |
hasEventHandler() | 检查事件是否有附加的处理程序。 | CComponent |
hasProperty() | 确定属性是否被定义。 | CComponent |
raiseEvent() | 发起一个事件。 | CComponent |
validate() | 验证给定的对象。 | CValidator |
受保护方法
方法 | 描述 | 定义在 |
---|---|---|
addError() | 添加关于指定属性的一个错误提示信息到活动记录中。 | CValidator |
isEmpty() | 检测给定值是否为空。 | CValidator |
validateAttribute() | 验证传入对象的属性。 | CTypeValidator |
属性详细
allowEmpty
属性
public boolean $allowEmpty;
是否此属性值允许为null或empty。默认值是true, 表示如果此属性值为空时它将通过验证。
dateFormat
属性
public string $dateFormat;
匹配日期格式的模板。默认值是 'MM/dd/yyyy'。 请参见CDateTimeParser以了解如何指定一个日期格式的更多细节。 仅当type设置为"date"时,这个值才会生效。
datetimeFormat
属性
public string $datetimeFormat;
匹配日期时间格式的模板。默认值是 'MM/dd/yyyy hh:mm'。 请参见CDateTimeParser以了解如何指定一个日期时间格式的更多细节。 仅当type设置为"datetime"时,这个值才会生效。
timeFormat
属性
public string $timeFormat;
匹配日期格式的模板。默认值是 'hh:mm'。 请参见CDateTimeParser以了解如何指定一个时间格式的更多细节。 仅当type设置为"time"时,这个值才会生效。
type
属性
public string $type;
属性值期望的数据类型。默认值是“string”。 有效的值包括 'string', 'integer', 'float', 'array', 'date', 'time' 和 'datetime'。
方法详细
validateAttribute()
方法
protected void validateAttribute(CModel $object, string $attribute)
| ||
$object | CModel | 需要验证的对象 |
$attribute | string | 需要验证的属性 |
protected function validateAttribute($object,$attribute)
{
$value=$object->$attribute;
if($this->allowEmpty && $this->isEmpty($value))
return;
if($this->type==='integer')
$valid=preg_match('/^[-+]?[0-9]+$/',trim($value));
else if($this->type==='float')
$valid=preg_match('/^[-+]?([0-9]*\.)?[0-9]+([eE][-+]?[0-9]+)?$/',trim($value));
else if($this->type==='date')
$valid=CDateTimeParser::parse($value,$this->dateFormat,array('month'=>1,'day'=>1,'hour'=>0,'minute'=>0,'second'=>0))!==false;
else if($this->type==='time')
$valid=CDateTimeParser::parse($value,$this->timeFormat)!==false;
else if($this->type==='datetime')
$valid=CDateTimeParser::parse($value,$this->datetimeFormat, array('month'=>1,'day'=>1,'hour'=>0,'minute'=>0,'second'=>0))!==false;
else if($this->type==='array')
$valid=is_array($value);
else
return;
if(!$valid)
{
$message=$this->message!==null?$this->message : Yii::t('yii','{attribute} must be {type}.');
$this->addError($object,$attribute,$message,array('{type}'=>$this->type));
}
}
验证传入对象的属性。 如果存在任何验证错误,错误提示信息将被添加到此对象中。