2

ページングされたフォームを Yii で作成しようとしています。各ページは、フィールドのグループ用です。これを行う最善の方法は、ActiveRecord モデルを拡張し、現在のページのパラメーターを追加することです。これにより、フォーム自体の独自のルールで rules() メソッドをオーバーライドすることもできます。

これに関する私の問題は、Yii ではモデルをネイティブに拡張できないことです。Yii はそれ自体で self::model(get_class($this)) を実行するため、getMetaData() メソッドをオーバーライドする必要がありました。

それだけでなく、Yii はクラス名に大きく依存しているため、findByPk を使用できません。

これを機能させるための多くの回避策を知っていますが、何か不足しているのではないかと思っています。

ありがとう、

カイル

- 編集 -

私はそれを完全に理解しました、そして私は完全に愚かだと感じます。model() メソッドを上書きして、現在のモデル クラスを返すだけで済みました。

そう:

class MyAr extends CActiveRecord {
    public static function model($class = __CLASS__){return parent::model($class);}
}

class ExtendedForm extends MyAr {
    public static function model($class = __CLASS__){return parent::model($class);}
}

ええ…私はばかだと思います。

4

2 に答える 2

3

ActiveRecord モデルを拡張するには、単純に拡張します! 必要なのは、モデル メソッドをオーバーライドすることだけです。

class MyAr extends CActiveRecord {
    public static function model($class = __CLASS__){return parent::model($class);}
}

class ExtendedForm extends MyAr {
    public static function model($class = __CLASS__){return parent::model($class);}
}
于 2012-08-07T22:32:30.103 に答える
0

モデル クラスは ActiveRecord のサブクラスであるため、ActiveRecord の一部の変数/メソッドをオーバーライドできます。私が言いたいのは、Activerecord を拡張する必要がないということです... もう一度! モデル定義時に拡張!そこに必要なものを追加するだけです。もちろん、この方法では、すべてのモデル クラスに手動でコードを追加するという不都合があります。多すぎる場合で、gii を使用している場合は、gii がモデルの生成に使用するコード テンプレートを変更するだけで済みます。

于 2012-08-05T09:09:25.867 に答える