0

私のアプリケーションでは、拡張機能を使用しています (これは私が所有しており、変更する可能性があります)。この拡張機能には、別のプロパティを使用してアプリケーションで拡張したい ActiveRecord ベースのクラスがあります。どうにかしてこれを行うことはできますか?FactoryはどうにかしてYii の振る舞いを助けることができますか?

拡張子のクラス:

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'],
        ];
    }
}

拡張機能には、通常 gii で作成された ProductController と対応するビュー ファイル (index、create、update、view、_form) もあります。$description製品に別のプロパティ (文字列、必須) を追加したいだけです。必要な列を追加するための移行が利用可能です。

モデルとコントローラ クラス、およびビュー ファイルを上書きする必要がありますか? それとも、よりエレガントなソリューションですか?

たとえば、 extension 内で行われる標準的なオブジェクトの作成を考えてみましょう:

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を変更する必要があります。

4

1 に答える 1