Yii создание сообщения - обмен данными между моделями CForm и CActiveRecord // как сохранить сообщение - испоьзование конструкт

если мы используем автозаполнение формы ,то главное - это совпадение имён атрибутов - они должны быть одинаковыми для обоих моделей -тогда мы с успехом сможем "автоматически заполняться" подобным образом (привожу один из методов - добавленных мной в контроллер по умолчанию sitecontroller - переопределение базового примера Hello World ):

/*Следующее действие ответственно за вывод формы
     - косвенно оно же проверяет значения и
    сохраняет данные в БД*/
    public function actionAddMessage()
    {
        $model=new AddMessageForm; // создаём модель формы
        // определяем характеристики формы
        $form = new CForm('application.views.site.AddMessageForm', $model);
        // если пост-запрос получен, то...
        if(isset($_POST['AddMessageForm']))
        {
            // получаем данные от пользователя
            $model->attributes=$_POST['AddMessageForm']; // читаем в CFrom
            // проверяем полученные данные и, если результат проверки положительный,
            if($model->validate()){
               //  print_r ($model->attributes); // можно посмотреть вид массива (но сперва откл. редирект)
               $model=new Message;
               $model->attributes=$_POST['AddMessageForm']; // читаем в CActiveRecord
                if($model->save())
                    // выполняем переадресацию К СПИСКУ СООБЩЕНИЙ
                    $this->redirect(array('site/messagelist'));
            }
        }
        // рендерим представление если форма не отправлена(или)
        $this->render('addmessage', array('form'=>$form));
    }

чтобы модели обоих типов заполнились - необходимо чтобы в их классах были определены поля и методы их проверки - по названию совпадающие с названиями атрибутов формы (это необходимо для наименее трудоёмкого заполнения формы но не обязательно):
например - для СActiveRecord (в меня только одно поле):

class Message extends CActiveRecord
{
    /**
     *
     */
	public $text;
	/*в качестве правила про верки для
    единственного поля нашей формы установим,
    что длинна сообщения не должна превышать 200 символов*/
    public function rules()
    {
        return array(
            array('text', 'length', 'min'=>10, 'max'=>200)
        );
    }
	
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }

    /**
     * возвращаем имя таблицы БД для данной модели
     */
    public function tableName()
    {
        return '{{message}}';
    }

    public function relations() //  задаём отношения с другими классами (User)
    {
        return array(
            'user' => array(self::BELONGS_TO, 'User', 'user_id')
        );
    }

}

ну а для CForm =

<?php

/*здесь мы опишем модель - для формы создания новых сообщений*/

class  AddMessageForm extends CFormModel
{
    public $text; // пусть будет только одно поле

    /*в качестве правила про верки для
    единственного поля нашей формы установим,
    что длинна сообщения не должна превышать 200 символов*/
    public function rules()
    {
        return array(
            array('text', 'length', 'min'=>10, 'max'=>200)
        );
    }
}

?>

кстати форму в примере выше мы генерировали с помощью конструктора форм, положив php-файл с таким вот содержимым :

<?php 

return array(
    'title'=>'Введите текст сообщения:',

    'elements'=>array(
        'text'=>array(
            'type'=>'textarea',//большое текстовое поле
            'maxlength'=>200,
        )
    ),
 
    'buttons'=>array(
        'login'=>array(
            'type'=>'submit',
            'label'=>'Создать',
        ),
    ),
);
 ?>

по адресу вызванному в первом листинге этой заметке:

  $form = new CForm('application.views.site.AddMessageForm', $model);

то есть это

 protected/views/site/AddMessageForm.php