Yii: поведения (behaviors)

Поведения в yii позволяют применять некоторые методы к уже существующему объекту из другого класса. Для чего могут понадобиться поведения? Рассмотрим “жизненный” пример. Нужно получить какие-то данные по залогиненному пользователю. Можно, конечно, использовать что-то вроде:

User::model()->findByPk(Yii::app()->user->id);

А можно использовать поведения и добавить метод в Yii::app()->user protected/components/WebUser.php

class WebUser extends CBehavior
{
  public function getData()
  {
    if ($this->getOwner()->id)
    {
      return User::model()->findByPk($this->getOwner()->id);
    }
    else
    {
      return FALSE;
    }
  }
}

Добавляем в конфиг protected/config/main.php

...
'user'=>array(
  'loginUrl' => '/login',
  // enable cookie-based authentication
  'allowAutoLogin'=>true,
  'behaviors' => array(
    'WebUser' => array(
      'class' => 'WebUser',
    )
  )
),
...

Теперь можно использовать так:

Yii::app()->user->data->posts;