【问题标题】:different rules for the same AR model in YiiYii 中相同 AR 模型的不同规则
【发布时间】:2025-12-26 05:25:08
【问题描述】:

我有一个模型扩展了具有特定规则的 AR 类。但现在我需要在这个表中插入行,但是有其他规则。我需要用新规则创建其他模型,还是可以定义其他规则?

【问题讨论】:

    标签: php mongodb activerecord yii yii-validation


    【解决方案1】:

    您可以设置验证方案。例如:

    $model = new Post(); 
    $model->scenario = 'new_line';
    $model->attributes = $_GET['data'];
    if ($model->validate()){
        $model->save(false);
    }
    

    在您的模型中:

    public function rules()
    {
        return array(
            array('username, text', 'required','on' => 'new_line')
        );
    }
    

    在模型规则中,所有数组行都必须有键“on”,否则此规则将不适用。

    阅读更多here

    【讨论】:

    • 为了让它更短,你甚至可以这样做 $model = new Post('new_line');
    【解决方案2】:

    如果您正在扩展您的课程(活动记录),那么您实际上可以覆盖您的 rules() 函数,即:

    class User extends ActiveRecord(){
        function rules(){
            return array(array(
                // Nomrally a rule
            ))
        }
    }
    

    然后让你的下一堂课:

    class User_extended extends ActiveRecord(){
        function rules(){
            return array(array(
                // Nomrally a rule
            ))
        }
    }
    

    应该就是这样。然后你可以调用User_extended 类,你的规则将应用于父类User,因为Yii 在$this 上下文中获取规则,$this 将是你的子类。

    但你也可以在这里使用场景,但它可能会变得很脏,尤其是当你需要覆盖其他方法时。

    【讨论】:

      【解决方案3】:

      谢谢。现在我正在尝试使用这个

      /**
       * @param string $attribute fields names wich should be validated
       * @param array $params additional params for validation
       */
      public function ValidatorName($attribute,$params) { … }
      

      【讨论】:

      • 如果你不使用场景你还需要绑定它,如果在beforeValidate你绑定它应该没问题。
      最近更新 更多