diff --git a/kernel/helpers/Slug.php b/kernel/helpers/Slug.php index 06b4918..ecd3432 100644 --- a/kernel/helpers/Slug.php +++ b/kernel/helpers/Slug.php @@ -2,6 +2,9 @@ namespace kernel\helpers; +use kernel\FormModel; +use kernel\modules\post\models\Post; + class Slug { @@ -123,6 +126,15 @@ class Slug return $options['lowercase'] ? mb_strtolower($str, 'UTF-8') : $str; } + public static function recursiveCreateSlug($model, $slug, $tmpSlug = '', $id = 1): string + { + if ($tmpSlug === '') $tmpSlug = $slug; + if ($model::where(['slug' => $tmpSlug])->exists()) { + $tmpSlug = $slug . '-' . $id++; + $tmpSlug = Slug::recursiveCreateSlug($model, $slug, $id); + } + return $tmpSlug; + } } @@ -162,4 +174,5 @@ chto-delat-esli-ya-ne-hochu-utf-8 מה-אם-×× ×™-לא-רוצה-utf-8-תווים This is an Example String. What's Going to Happen to Me? This_is_a_Test_String_What_s_Going_to_Ha -*/ \ No newline at end of file +*/ + diff --git a/kernel/modules/post/service/PostService.php b/kernel/modules/post/service/PostService.php index 07b93da..764b6b7 100644 --- a/kernel/modules/post/service/PostService.php +++ b/kernel/modules/post/service/PostService.php @@ -15,7 +15,7 @@ class PostService $model->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); + $model->slug = Slug::recursiveCreateSlug(Post::class, $this->createSlug($form_model)); if ($model->save()){ return $model; } @@ -25,22 +25,7 @@ class PostService 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; + return Slug::url_slug($form_model->getItem('title'), ['transliterate' => true, 'lowercase' => true]); } public function update(FormModel $form_model, Post $post): false|Post