Реализуете пользовательский геттер в Yii?

Я работаю с Yii, и у меня следующая ситуация:

У меня есть таблица MySQL:

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

Тогда у меня есть модель из этой таблицы. И, наконец, у меня есть представления для создания, списка, администратора, обновления и просмотра.

В админке и представлении просмотра я хочу отобразить value поле с двумя десятичными числами Один из вариантов сделать это может быть в представлении и в файлах администратора в формате числа. Есть ли способ создать метод в модели, а затем ничего не делать в представлениях, но сам метод решит форматирование числа?

Спасибо

1 ответ

Решение

Вы можете переопределить метод afterFind() 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Когда форматирование завершено, мы можем использовать любой из них, как требуется, и не нужно переформатировать обратно к оригиналу, когда нам нужен оригинал.

Другие вопросы по тегам