yarcode / yii2-eav
为 Yii2 的 EAV
0.3.2
2016-04-29 07:56 UTC
Requires
- php: >=5.4.0
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2024-09-14 19:47:45 UTC
README
为 Yii2 的 EAV 动态属性
配置
查看 examples/m140423_034003_object.php 文件,并根据您使用的实体创建自己的数据结构。在大多数情况下,您只需要更改 $entityName 变量。例如
$entityName="user_profile";
扩展您在 yarcode\eav\models 命名空间中找到的所有模型,并将它们放在唯一的命名空间下。例如 common\models\user_profile_eav。
将行为附加到您的模型并定义 getEavAttributes 关系
/** * @inheritdoc */ public function behaviors() { return [ [ 'class' => \yarcode\eav\EavBehavior::className(), 'valueClass' => \common\models\user_profile_eav\AttributeValue::className(), ], ]; } /** * @return yii\db\ActiveQuery */ public function getEavAttributes() { $query = \common\models\user_profile_eav\Attribute::find(); $query->multiple = true; return $query; }
渲染
控制器示例
public function actionProfileFields() { $model = Yii::$app->user->identity->profile; $model->setScenario(UserProfile::SCENARIO_UPDATE); /** @var DynamicModel $eav */ $eav = $model->getEavModel(); if ($eav->load(Yii::$app->request->post()) && $eav->validate()) { $dbTransaction = Yii::$app->db->beginTransaction(); try { $eav->save(false); $dbTransaction->commit(); } catch (\Exception $e) { $dbTransaction->rollBack(); throw $e; } return $this->redirect(['index']); } return $this->render('profile-fields', [ 'model' => $model, 'eav' => $eav ]); }
视图示例
<?php $form = ActiveForm::begin(); ?> <?php $eav->activeForm = $form; foreach ($eav->handlers as $handler) { echo $handler->run(); } ?> <div class="form-group"> <?= Html::submitButton('Save', ['class' => 'btn btn-primary', 'name' => 'save-button']) ?> </div> <?php ActiveForm::end(); ?>