在我的应用程序中,我使用了扩展程序(我拥有并可以修改)。这个扩展有一个基于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。
答案 0 :(得分:0)
就扩展课程而言,只需继续添加属性即可。你的新课将继承父类的所有内容,并拥有你的新属性。
关于覆盖生成的文件,生成文件时gii中有diff选项,因此您可以预览并决定要保留的内容和要覆盖的内容。请注意,您必须手动合并任何更改。