如何扩展属于Yii2扩展的模型?

时间:2017-05-17 12:20:55

标签: yii2 override yii2-extension

在我的应用程序中,我使用了扩展程序(我拥有并可以修改)。这个扩展有一个基于ActiveRecord的类,我希望在应用程序中使用另一个属性进行扩展。我能以某种方式这样做吗?无论如何Factory可以提供帮助还是Yii behaviour

分机中的课程:

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

1 个答案:

答案 0 :(得分:0)

就扩展课程而言,只需继续添加属性即可。你的新课将继承父类的所有内容,并拥有你的新属性。

关于覆盖生成的文件,生成文件时gii中有diff选项,因此您可以预览并决定要保留的内容和要覆盖的内容。请注意,您必须手动合并任何更改。