【问题标题】:Yii2 virtual attribute getter had to change to function callYii2 虚拟属性 getter 不得不改为函数调用
【发布时间】:2017-06-02 12:45:55
【问题描述】:

我是 OOP 和 Yii2 的新手。我在模型中有一个函数:

public function getDatRev() {
    if ($this->rev) {
        return $this->rev;
    } else {
        return $this->datum;
    }
}

View直到现在我都是这样使用它的:

$model->datRev;

它会返回正确的值。现在我不知道发生了什么变化,也许我也更新了框架,但是旧的结构不再起作用了,为了使它起作用,我必须将其更改为:

$model->getDatRev();

你能解释一下这是为什么吗?

【问题讨论】:

    标签: methods yii2 getter-setter virtual-attribute


    【解决方案1】:

    当你尝试获取属性时,Yii2 会调用魔术方法__get ()。返回值取决于父类中此方法的实现。 Yii2 可以检查该属性是否存在于某个容器中,或者是否存在该属性的 getter。 在您的情况下,您似乎没有调用父母的方法__get()。这可能是因为您覆盖了__get() 方法或初始化了此属性。

    【讨论】:

      【解决方案2】:

      您的类需要扩展yii\base\Object(直接或不)以使用短属性语法($model->abc 而不是$model->getAbc())。提到的魔术方法__get() @Timur 在那里定义并在yii\base\Component 类中进一步扩展。

      【讨论】:

      • 我已经用giiant 生成了我的模型,而且我绝对没有改变这些基本的东西。如果以前是这样(因为它正在工作),那么现在也是这样。可能我已经改变了一些东西,但我不知道会导致这样的结果。这太疯狂了……
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 1970-01-01
      • 2012-01-31
      • 2019-09-22
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      相关资源
      最近更新 更多