fix create slug
This commit is contained in:
		| @@ -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 | ||||
| */ | ||||
| */ | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user