モデルのカスタマイズ

Giiで生成したソースをカスタマイズして、項目ごとのバリデーションなどの設定を追加します。
参考:この辺り一帯 フォームを使う: モデルの作成 | Yii 1.1 公式ガイド | Yii PHP Framework

CFromModelとCActiveRecord

公式ドキュメントでは、サンプルのCFormModelとCActiveRecord(gii生成ソース)は概ね同様、とあります。
yii\framework\db\ar\CActiveRecord.php と yii\framework\web\CFormModel.php の違いは、CFormModelはデータベースではなくメモリから読み込む、と記載されています*1。フォームの入力を受け取る事を指しているようです。
CActiveRecordおよびCFormModelはどちらもCModel(yii\framework\base\CModel.php)を継承しているので、ドキュメントで同様sされていると思います。


後々重要になると思われる、CActiveRecordとCControllerの仕様書など
CActiveRecord | API Documentation for Yii 1.1 | API Documentation for Yii 1.1 | Yii PHP Framework
CController | API Documentation for Yii 1.1 | API Documentation for Yii 1.1 | Yii PHP Framework
基底Controller protected\components\Controller.php

モデルクラスの定義

Giiで生成したモデルには、属性の定義がありません。
入力のデフォルト値を、必要に応じて設定追加します。
デフォルト値が空などの場合は特に指定しなくても支障はないようです。

バリデーション

テーブル定義次第で一部定義される場合がありますが、詳細な設定を追加。
方法は参考URLの通り フォームを使う: モデルの作成 | Yii 1.1 公式ガイド | Yii PHP Framework
指定可能なオプション(allowEmpty等)はこちらなどを参照 CUniqueValidator | API Documentation for Yii 1.1 | API Documentation for Yii 1.1 | Yii PHP Framework
定義済みのバリデーターはyii\framework\validators\以下にあります。

ユーザ入力をさせない項目には、バリデーションルールを設定しません。

記憶しておくべき重要なことは、バリデーションルールはユーザの入力データをチェックするために使うものであり、コードの中で生成するデータ (例えば、タイムスタンプや自動生成される主キー) をチェックするためのものではない、ということです。従って、エンドユーザからの入力を予定しない属性については、バリデーションルールを追加してはいけません。

属性への代入をセキュアにする

この項目には、主にコントローラ側での設定です。ドキュメントでは明示してないのでちょっとややこしい*2
「安全な属性を宣言する」は、モデル側の設定です。

バリデーションの始動

Giiで生成したソースでは、セーブ前に$model->validate()をしていないように見えますが、指定がない場合save()の中で自動的にvalidateされています。

	public function save($runValidation=true,$attributes=null)
	{
		if(!$runValidation || $this->validate($attributes))
			return $this->getIsNewRecord() ? $this->insert($attributes) : $this->update($attributes);
		else
			return false;
	}

ドキュメントのように、コントローラ側で事前validateした場合は、$model->save(false)でバリデーションをパスします。

*1:CFormModelの前文参照

*2:$modelなんて設定してる以上モデルじゃないのは明白ですが