diff --git a/src/TranslateableBehavior.php b/src/TranslateableBehavior.php index 251fb20..8c4ac61 100644 --- a/src/TranslateableBehavior.php +++ b/src/TranslateableBehavior.php @@ -41,6 +41,8 @@ class TranslateableBehavior extends Behavior public function events() { return [ + ActiveRecord::EVENT_INIT => 'addTranslations', // populate translations on new object + ActiveRecord::EVENT_AFTER_FIND => 'addTranslations', // populate translations on find object ActiveRecord::EVENT_AFTER_VALIDATE => 'afterValidate', ActiveRecord::EVENT_AFTER_INSERT => 'afterSave', ActiveRecord::EVENT_AFTER_UPDATE => 'afterSave', @@ -118,6 +120,27 @@ public function hasTranslation($language = null) return false; } + + /** + * Auto populate translation attributes + * + * @return void + */ + public function addTranslations() + { + $this->owner->{$this->translationRelation}; + + /* @var ActiveRecord $class */ + $class = $this->owner->getRelation($this->translationRelation)->modelClass; + + /* If method create or update - populate attributes */ + $className = (new \ReflectionClass($class))->getShortName(); + foreach (Yii::$app->request->post($className, []) as $language => $data) { + foreach ($data as $attribute => $translation) { + $this->owner->translate($language)->$attribute = $translation; + } + } + } /** * @return void