【问题标题】:How to extend an activeRecord model in Yii如何在 Yii 中扩展 activeRecord 模型
【发布时间】:2012-08-08 06:32:30
【问题描述】:

我正在尝试在 Yii 中创建一个分页的表单。每个页面用于一组字段。我认为最好的方法是扩展 ActiveRecord 模型并为当前页面添加一个参数。这也允许我用我自己的表单规则覆盖 rules() 方法。

我的问题是,Yii 不允许我们本地扩展模型。我不得不重写 getMetaData() 方法,因为 Yii 自己运行 self::model(get_class($this)) ,这最终破坏了一切。

不仅如此,我还不能使用 findByPk,因为 Yii 严重依赖类名。

我知道有很多方法可以解决这个问题,但我想知道我是否遗漏了什么。

谢谢,

凯尔

-- 编辑--

我完全明白了,我完全觉得自己很愚蠢。我所要做的就是覆盖 model() 方法以返回当前模型类。

所以:

class MyAr extends CActiveRecord {
    public static function model($class = __CLASS__){return parent::model($class);}
}

class ExtendedForm extends MyAr {
    public static function model($class = __CLASS__){return parent::model($class);}
}

是的……我觉得自己很愚蠢。

【问题讨论】:

  • 如果我理解正确的话,你想做一个像巫师一样的东西,对吧!!如果是这样,您为什么不使用此行为并将其配置为您的确切需要? yiiframework.com/extension/wizard-behavior
  • 这实际上看起来很酷,可能是我的解决方案。我会检查一下。谢谢!

标签: yii


【解决方案1】:

要扩展 ActiveRecord 模型,只需扩展它!您需要做的就是覆盖模型方法:

class MyAr extends CActiveRecord {
    public static function model($class = __CLASS__){return parent::model($class);}
}

class ExtendedForm extends MyAr {
    public static function model($class = __CLASS__){return parent::model($class);}
}

【讨论】:

    【解决方案2】:

    模型类是 ActiveRecord 的子类,因此您可以覆盖 ActiveRecord 的一些变量/方法。我的意思是没有必要再扩展 Activerecord...!它在定义模型时被扩展!因此,只需在其中添加您需要的任何内容。当然,这种方式有在每个模型类中手动添加代码的不便之处。如果它太多,并且如果您使用的是 gii,那么您只需修改 gii 用于生成模型的代码模板。

    【讨论】:

    • 我希望在我的表单中省略所有特定代码。我的模型不需要所有这些信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 2011-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    相关资源
    最近更新 更多