pendalf89\filemanager\models\Mediafile::init PHP Method

init() public method

public init ( )
    public function init()
    {
        $linkTags = function ($event) {
            if ($this->tagIds === null) {
                return;
            }
            if (!is_array($this->tagIds)) {
                $this->tagIds = [];
            }
            $whereIds = $models = $newTagIds = [];
            foreach ($this->tagIds as $tagId) {
                if (empty($tagId)) {
                    continue;
                }
                if (preg_match("/^\\d+\$/", $tagId)) {
                    $whereIds[] = $tagId;
                    continue;
                }
                // если tagId не число, то значит надо создать новый тег
                if (!($tag = Tag::findOne(['name' => $tagId]))) {
                    $tag = new Tag();
                    $tag->name = $tagId;
                    if (!$tag->save()) {
                        continue;
                    }
                }
                $newTagIds[] = $tag->id;
                $models[] = $tag;
            }
            $this->unlinkAll('tags', true);
            if ($whereIds) {
                $models = array_merge($models, Tag::find()->where(['id' => $whereIds])->all());
            }
            foreach ($models as $model) {
                $this->link('tags', $model);
            }
            // что бы после сохранения в значение были новые теги
            $this->tagIds = array_merge($whereIds, $newTagIds);
        };
        $this->on(static::EVENT_AFTER_INSERT, $linkTags);
        $this->on(static::EVENT_AFTER_UPDATE, $linkTags);
    }