content = $form_model->getItem('content'); $model->user_id = $form_model->getItem('user_id'); $model->title = $form_model->getItem('title'); $model->slug = $this->createSlug($form_model); if ($model->save()){ return $model; } return false; } public function createSlug(FormModel $form_model): string { $slug = Slug::url_slug($form_model->getItem('title'), ['transliterate' => true, 'lowercase' => true]); if (Post::where(['slug' => $slug])->exists()) { $id = 1; $tmpSlug = $slug . '-' . $id++; $slug = $this->recursiveCreateSlug($slug, $tmpSlug, $id); } return $slug; } protected function recursiveCreateSlug($slug, $tmpSlug, $id): string { if (Post::where(['slug' => $tmpSlug])->exists()) { $tmpSlug = $slug . '-' . $id++; $tmpSlug = $this->recursiveCreateSlug($slug, $tmpSlug, $id); } return $tmpSlug; } public function update(FormModel $form_model, Post $post): false|Post { $post->content = $form_model->getItem('content'); $post->user_id = $form_model->getItem('user_id'); if ($post->save()){ return $post; } return false; } }