- public function rules()
- {
- return array(
- array('contact','required','on'=>'edit','message'=>'联系人必须填写.'),
- array('contact','length','on'=>'edit','min'=>2,'max'=>10,'tooShort'=>'联系人长度请控制在2-10个字符.','tooLong'=>'联系人长度请控制在2-10个字符.'),
- array('tel', 'match','pattern' => '/^(\d{3}-|\d{4}-)(\d{8}|\d{7})?$/','message' => '请输入正确的电话号码.'),
- array('fax', 'match','pattern' => '/^(\d{3}-|\d{4}-)(\d{8}|\d{7})?$/','message' => '请输入正确的传真号码.'),
- array('mobile', 'match','pattern' => '/^13[0-9]{1}[0-9]{8}$|15[0189]{1}[0-9]{8}$|189[0-9]{8}$/','message' => '请输入正确的手机号码.'),
- array('email','email','on'=>'edit','message'=>'邮箱输入有误.'),
- array('zipcode','required','on'=>'edit','message'=>'邮编必须填写.'),
- array('zipcode','numerical','on'=>'edit','message'=>'邮编是6位数字.'),
- array('zipcode','length','on'=>'edit','min'=>6,'max'=>6,'tooShort'=>'邮编长度为6位数.','tooLong'=>'邮编长度为6位数.'),
- array('website','url','on'=>'edit','message'=>'网址输入有误.'),
- array('qq', 'match','pattern' => '/^[1-9]{1}[0-9]{4,11}$/','message' => '请输入正确的QQ号码.'),
- array('msn','email','on'=>'edit','message'=>'MSN输入有误.'),
- );
- }
转自:http://my.oschina.net/qeecoo/blog/49437
关于我们新创建的项目(project)表单中所有字段域没有标记为必填,我们可以不输入任何数据就能提交成功。但是,我们知道,每个表单至少需要一个必填字段。让我们设置一个必填字段。
为表单添加必填字段域
在Yii中当表单与AR模型类交互时,设置一个验证规则来限制字段域的范围。这需要在Project AR模型类的rules()方法中,添加一个数组,数组中包含特定的值。
打开 /protected/models/Project.php类,已经看到了公共的rules方法被定义了,并且在rules方法中已经存在了一些规则:
/**
* @为model返回一个数组规则
*/
public function rules()
{
return array(
array('create_user_id, update_user_id', 'numerical', 'integerOnly'=>true),
array('name', 'length', 'max'=>128),
array('create_time, update_time', 'safe'),
array('id, name, description, create_time, create_user_id, update_time, update_user_id', 'safe', 'on'=>'search'),
);
rules()方法返回的是一个规则数组,一般每一个规则格式如下所示:
Array('Attribute List', 'Validator', 'on'=>'Scenario List', …additional options);
Attribute List(属性列表)是一个字符串,需要验证的类的属性名用逗号分开。Validator(验证器)指的是使用什么样的规则执行验证。on这个参数指定了一个scenario(情景)列表来使用这条验证规则。
提示:scenario(情景)允许你限制验证规则应用在特定的上下文中。一种典型的例子是insert(插入)或update(更新)。例如:如果被指 定为'on'=>'insert',这将表明验证规则只适用于模型的插入情景。这同样适用于'update'或其它的任何你希望定义的情景。你可以 设置一个模型的scenario(情景)属性或能过构造函数传给一个模型的实例。
如果这里没有设置,该规则将适用于调用save()方法的所有情景。最后,additional options(附加选项)是name/value(键值对)出现的用来初始化validator(验证器)的属性。
validator(验证器)可以是模型类中的一个方法或一个单独的验证器类。如果定义为模型类中的方法,它的格式必须是如下的形式:
public function ValidatorName($attribute,$params) { ... }
如果我们使用一个validator(验证器)类,则这个类必须继承CValidator。其实有三种方法可以指定validator(验证器),包括前面提到的一种格式:
1.第一种是在模型类中定义验证方法
2.第二种是指定一个单独的验证器类(这个类继承CValidator)。
3.第三种是你可以使用Yii框架中现有的验证器,指定预定义的验证器别名即可。
Yii为你提供了很多预定义的验证器类,同时也指定了别名,用在定义规则时。Yii1.1版本,预定义的验证器别名的完整列表如下:
* boolean:它是CBooleanValidator类的别名,验证属性的值是布尔值(true或false)。
* captcha:它是CCaptchaValidator类的别名,验证属性的值等于一个显示的CAPTCHA(验证码)的值。
* compare:它是CCompareValidator类的别名,验证属性的值与另一个属性的值相等。
* email:它是CEmailValidator类的别名,验证属性的值为有一个有效的Email地址。
* default:它是CDefaultValidator类的别名,验证属性的值为分配的默认值。
* exist:它是CExistValidator类的别名,验证属性的值在表中的对应列中存在。
* file:它是CFileValidator类的别名,验证属性的值包含上传的文件。
* filter:它是CFilterValidator类的别名,用过滤器转换属性的值。
* in:它是CRangeValidator类的别名,验证属性值在一个预定义列表中。
* length:它是CStringValidator类的别名,验证属性值的长度在一个范围内。
* match:它是CRegularExpressionValidator类的别名,验证属性值匹配一个正则表达式。
* numerical:它是CNumberValidator类的别名,验证属性值是数字。
* required:它是CRequiredValidator类的别名,验证属性值必需有值,不能为空。
* type:它是CTypedValidator类的别名,验证属性值是一个指定的数据类型。
* unique:它是CUniquedValidator类的别名,验证属性值在表中的对应列中是唯一的。
* url:它是CUrlValidator类的别名,验证属性值是一个有效的URL。
因为我们想使项目(project)的name属性字段必填,这个看着好像应该使用required别名可以满足我们的需要。让我们添加一验证规则指定name属性的验证器为required别名。我们将追加到现有的规则中:
public function rules()
{
return array(
array('create_user_id', 'numerical','integerOnly'=>true),
array('name', 'length', 'max'=>128),
array('create_time, update_time', 'safe'),
array('id, name, description, create_time, create_user_id,update_time, update_user_id', 'safe', 'on'=>'search'),
array('name', 'required'),
);
}