在Yii中实现自定义getter?

时间:2012-04-26 05:19:42

标签: php yii yii-cmodel

我正在与Yii合作,我有以下情况:

我有一个MySQL表:

charges {
    id INT AUTOINCREMENT,
    name VARCHAR(256),
    value DOUBLE
}

然后我从这张表中得到了模型。最后我有创建,列表,管理,更新和查看的视图。

管理视图视图中,我想显示使用两个十进制数字格式化的value字段。执行此操作的一个选项可以是视图 admin 文件格式化数字。有没有办法在模型中创建一个方法,然后不必在视图中做任何事情,但方法本身将解决格式化数字?

感谢

1 个答案:

答案 0 :(得分:3)

您可以覆盖模型中的afterFind() method of CActiveRecord并格式化其中的value字段。

或者,您也可以声明模型的虚拟属性,并在afterFind()方法中设置它,并在视图中使用此虚拟属性。

示例(使用虚拟属性):

Class ChargesModel extends CActiveRecord{
    public $valueModified;

    /*
     * other code
     */

    protected function afterFind(){
        parent::afterFind();
        // in the following line i'm just making $valueModified and $value equal, but obviously you would have to insert the 2 decimals
        $this->valueModified=$this->value;
    }
}

然后您可以像这样访问虚拟属性:$modelObject->valueModified

我建议你使用虚拟属性,因为你有了未经修改的$value和修改过的$modifiedValue,一旦格式化完成,我们可以根据需要使用,而不是必须当我们需要原件时,重新格式化为原始版本。