2012-08-24 9 views
6

データベーステーブルを持たないyiiモデルを作成しましたが、問題はビューファイル内のモデル関数を呼び出そうとするたびに認識されませんデータベーステーブルなしでyiiモデルを作成する方法

class blah extends CActiveRecord() 

    public static function model($className=__CLASS__) 
    { 
     return parent::model($className); 
    } 

    public function tableName() 
    { 
     return '{{UNVETTED}}'; 
    } 

    public function sayHello() 
    { 
     echo "hello world"; 
    } 
} 

ビュー内私はこの

blah::model()->sayHello()のようにそれを呼ばれ、その後、私は死の白いページを得ながら、なぜですか?

答えて

7

モデルがデータベーステーブルに関連付けられていない場合は、CActiveRecordを使用する必要はありません。 CModelまたはCFormModelではなくところで

、この問題を解決する使用します。

class blah extends CActiveRecord() 

class blah extends CActiveRecord { 

に私はあなたが白のページを取得している理由それはだと思います。

+0

rules()を実装しても問題ありませんか? – sasori

+1

ルールメソッドがCModelのものであるので、それでもやることができます:http://www.yiiframework.com/doc/api/1.1/CModel#rules-detailモデルにバリデーションルールを付けることが大丈夫かどうか、あなたが決める :) – Nemoden

10

テーブルなしでYiiモデルを作成する場合は、CFormModelを使用して作成できます。モデル変数、そのルール、および属性ラベルを定義しています。

CFormModelを使用して作成されたパスワード変更フォームのサンプルコード。

<?php 

class ChangePassword extends CFormModel 
{ 

    public $password; 
    public $verifyPassword; 
    public $currentPassword;  

    public function rules() { 

      $rules[] = array('currentPassword', 'safe'); 
      $rules[] = array('currentPassword', 'required');    
      $rules[] = array('password, verifyPassword', 'required'); 
      $rules[] = array('verifyPassword', 'compare', 'compareAttribute' =>'password', 'message' => 'Retyped password is incorrect'); 

      return $rules; 
    } 

    /** 
    * Declares attribute labels. 
    */ 
    public function attributeLabels() { 
      return array(
        'password'=>'New password', 
        'verifyPassword'=>'Retype your new password', 
        'currentPassword'=>'Your actual password', 
      ); 
    } 

} 
関連する問題