'beforeSave', ActiveRecord::EVENT_BEFORE_INSERT => 'beforeSave', ]; } /** * @param ModelEvent $event */ public function beforeSave($event) { foreach($this->fields as $field){ $field_name = $field['name']; $name = $field_name; if($this->is_language) { $name = '['.$this->owner->language_id.']'.$name; } $image = UploadedFile::getInstance($this->owner, $name); if(empty($image) && $event->name == ActiveRecord::EVENT_BEFORE_UPDATE) { $this->owner->$field_name = $this->owner->getOldAttribute($field_name); } elseif(!empty($image)) { $imgDir = \Yii::getAlias('@storage/'.$field['directory'].'/'); if(!is_dir($imgDir)) { mkdir($imgDir, 0755, true); } $baseName = $image->baseName; $iteration = 0; $file_name = $imgDir.$baseName.'.'.$image->extension; while(file_exists($file_name)) { $baseName = $image->baseName.'_'.++$iteration; $file_name = $imgDir.$baseName.'.'.$image->extension; } unset($iteration); $this->owner->$field_name = $baseName.'.'.$image->extension; $image->saveAs($file_name); } } } public function getImageFile($image = 'image') { return empty($this->owner->$image) ? null : '/storage/'.$this->fields[0]['directory'].'/'. $this->owner->$image; } public function getImageUrl($image = 'image') { return empty($this->owner->$image) ? null : '/storage/'.$this->fields[0]['directory'].'/'. $this->owner->$image; } }