RockCat 2011-05-16 11:26:26 3989次浏览 8条回复 0 0 0

请问yii中,一个表的两个字段,必填其一,该怎么做?

字段A和B,如果A和B都为空,则通不过,A和B必须有一个有值。

  • 回复于 2011-05-16 11:28 举报

    写个自定义规则就行了,你懂的!

  • 回复于 2011-05-16 11:28 举报

    验证规则?

  • 回复于 2011-05-16 11:30 举报

    没错,自定义验证规则!

  • 回复于 2011-05-16 11:30 举报

    a != null || b != null ??

  • 回复于 2011-05-16 13:35 举报

    我在blog demo的Post模型rules方法中有这样一句代码:

    array('tags', 'match', 'pattern'=>'/^[\w\s,]+$/',
      'message'=>'Tags can only contain word characters.'),
    

    这个是自定义的一个验证规则,只是简单的正则校验,显然我这个需求不是这么简单一个表达式就能实现的吧?应该是一个方法,如果是一个方法该怎么写呢?

  • 回复于 2011-05-16 13:58 举报
    array('A, B','checkAb'),
    function checkAb($attribute, $params) {
      if (empty($this->a)  &&  emtpy($this->b))
        $this->addError('a', 'a和b不能同时为空!');
    }
    
  • 回复于 2011-05-16 14:04 举报

    你可以在后面写个方法名字,然后自己再下面写个方法,直接调用就可以了
    声明验证规则,应重写此方法。 每个规则是数组具有以下结构:

    array('attribute list', 'validator name', 'on'=>'scenario name', ...validation parameters...)
    

    注:
    attribute list: 指定属性 (以逗号分隔) 进行验证 ;
    validator name: 指定要使用的验证程序。
    它可以是方法的一个模型类的一个内置的验证器或验证程序类 (或其路径的别名) 名称的名称。
    一种验证方法必须具有以下签名:
    //$params refers to validation parameters given in the rule
    function validatorName($attribute,$params)
    内置的验证程序是指在 CValidator::builtInValidators 中声明的验证程序之一。 验证程序的类是扩展 CValidator 的类。
    on: 应执行有效性规则时,此选项指定的情形。
    用逗号分开不同的方案。
    如果未设置此选项,将在任何情况下应用规则。
    请 方案
    中有关此选项的更多详细信息,参阅。
    附加参数用于初始化相应的验证程序属性。
    请参阅 individal 验证器类 API 可能的属性。

  • 回复于 2011-05-16 15:26 举报

    谢谢楼上的各位!

您需要登录后才可以回复。登录 | 立即注册