2017-05-17 21 views
0

私のアプリケーションでは、拡張機能を使用しています。この拡張モジュールには、ActiveRecordベースのクラスがあり、別のプロパティでアプリケーション内で拡張したいと思っています。何とかこれをやることができますか?とにかくFactory助けてもいいですか?Yii behaviour?拡張子でYii2拡張の一部であるモデルを拡張する方法は?

クラス:

namespace extension; 

/** 
* @property integer $id 
* @property string $name 
*/ 
class Product extends ActiveRecord { 

    public static function tableName() { 
     return 'product'; 
    } 

    /** 
    * @inheritdoc 
    */ 
    public function rules() { 
     return [ 
      [['id', 'name'], 'required'], 
      [['id'], 'integer'], 
      [['name'], 'string'], 
     ]; 
    } 
} 

ProductControllerと、対応するビューファイル(インデックス、作成、更新、ビュー、_form)が定期的にGIIで製造された拡張子でもあります。私はちょうど別のプロパティ$description(文字列、必須)を製品に追加したいと思います。必要な列を追加するための移行が利用可能です。

モデルとコントローラのクラスとビューファイルを上書きする必要がありますか?それともより洗練されたソリューションですか?私は創造に影響を与えることができない私の理解から

public function actionCreate() { 
    $model = new Product(); 

    if ($model->load(Yii::$app->request->post()) && $model->save()) { 
     return $this->redirect(['view', 'language' => $model->language]); 
    } else { 
     return $this->render('create', [ 
      'model' => $model, 
     ]); 
    } 
} 

例えば、拡張子内で行わをとり、標準オブジェクトの作成を検討してください。または私は間違っていますか?

私の印象は、プロパティを表示する必要があるため、すべてのビューファイルをオーバーライドしてからcontrollerNamespaceを変更する必要があるということです。

+0

拡張機能を設定することもできます。クラスマップ機能を使用することもできます。http://www.yiiframework.com/doc-2.0/guide-concept-autoloading.html#class-map – soju

+0

@sojuクラスマップはちょっとハッキーだね。ではない?どのようにして拡張機能を構成可能にすることができますか(私はまだ構成全体に精通していません)?それを延長する準備は大丈夫です。 – robsch

答えて

0

クラスを拡張する限り、そのプロパティを追加するだけです。あなたの新しいクラスは、親クラスからすべてを継承し、あなたの新しいプロパティを持っています。あなたがファイルを生成するときに、プレビューし、維持するために、何を上書きするかを決めることができるように

は、生成されたファイルを上書きについては、GIIにおける差分オプションがあります。ただし、手動で変更をマージする必要があることに注意してください。

+0

私はクラスを拡張する方法を知っています。オブジェクトが作成される場所について考えてみましょう:拡張機能の中で。オブジェクトの作成時に使用されるクラスをどのように変更する必要がありますか?私は、エクステンション内のコードの残りの部分(コントローラ、ビュー、その他のロジック)を使用したいと思います。 – robsch

+0

は、私はあなたを誤解し申し訳ありませんが、私はまだ誤解かもしれないが、私が正しくあなたを理解しない場合:私はあなたが単にあなたが余分な性質のためのコントローラと、アカウント内に作成するオブジェクトを決定しなければならないと思います。または、古いバージョンのスーパーセットであるため、おそらく、常に新しいバージョンのクラスを使用できます。それは一般的に古いものがしたすべてのケースで機能するはずです。 – dataskills

関連する問題