ivantxo
ivantxo

Reputation: 639

Implementing a custom getter in Yii?

I am working with Yii and I have the following situation:

I have a MySQL table:

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

Then I have the model from this table. And finally I have the views for create, list, admin, update and view.

In the admin and view views I want to display the value field formated with two decimal numbers. One option to do this could be in the view and admin files format the number. Is there a way to create a method in the model and then not having to do anything in the views but the method itself will solve formating the number?

thanks

Upvotes: 1

Views: 1496

Answers (1)

bool.dev
bool.dev

Reputation: 17478

You can override the afterFind() method of CActiveRecord in your model and format the value field in it.

Alternatively you could also declare a virtual attribute of the model, and set it in the afterFind() method, and use this virtual attribute in the views.

Example(with virtual attribute):

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;
    }
}

Then you can access the virtual attribute like this : $modelObject->valueModified

I would recommend you to use the virtual attribute, because you then have both the unmodified $value and modified $modifiedValue, once the formatting is done, we can use either as required, and not have to reformat back to original when we need the original.

Upvotes: 3

Related Questions