نحوه فارسی سازی slug در لاراول با پکیج cviebrock/eloquent-sluggable

سلام دوستان، توی این پست کوتاه قصد دارم به شما نحوه استفاده از پکیج cviebrock/eloquent-sluggable یاد بدم.

نحوه فارسی سازی slug در لاراول با پکیج cviebrock/eloquent-sluggable
نحوه فارسی سازی slug در لاراول با پکیج cviebrock/eloquent-sluggable

به ترتیب باید کار های زیر انجام بدید.

قدم اول: ابتدا باید پکیج بوسیله کامپوزر نصب کنید. پس کد زیر توی ترمینال اجرا کنید.

composer require cviebrock/eloquent-sluggable
https://virgool.io/p/ya2kxk3cces9/composerrequirecviebrock/eloquent-sluggable
php artisan vendor:publish --provider=&quotCviebrock\EloquentSluggable\ServiceProvider&quot

قدم سوم: پکیج توی فایل مدل مورد نظر اضافه کنید. من کد کاملشو براتون میزارم.

use Cviebrock\EloquentSluggable\Sluggable; 
class Post extends Model { 
     use Sluggable;

     public function sluggable(): array {
          return [ 'slug' => [ 'source' => 'name' ] ];
      } 

اینا هم کدهای اضافی که مربوط به خودتونه. اینارو گذاشتم بخاطر اینکه برای برخی از دوستان که شاید نامشخص باشه که دقیقا بدونن باید کجا بزارن.

     protected $table = 'post'; 
     protected $fillable = ['user_id', 'name', 'description']; 
}

قدم چهارم: بخاطر اینکه آدرس ما فارسی پشتیبانی کنه باید فایل sluggable.php توی دایرکتوری config باز کنیم و کد زیر به جای 'method' => null, قرار بدیم.

'method' => function($string, $separator = '-') {
$_transliteration = array(
'/ä|æ|ǽ/' => 'ae',
'/ö|œ/' => 'oe',
'/ü/' => 'ue',
'/Ä/' => 'Ae',
'/Ü/' => 'Ue',
'/Ö/' => 'Oe',
'/À|Á|Â|Ã|Å|Ǻ|Ā|Ă|Ą|Ǎ/' => 'A',
'/à|á|â|ã|å|ǻ|ā|ă|ą|ǎ|ª/' => 'a',
'/Ç|Ć|Ĉ|Ċ|Č/' => 'C',
'/ç|ć|ĉ|ċ|č/' => 'c',
'/Ð|Ď|Đ/' => 'D',
'/ð|ď|đ/' => 'd',
'/È|É|Ê|Ë|Ē|Ĕ|Ė|Ę|Ě/' => 'E',
'/è|é|ê|ë|ē|ĕ|ė|ę|ě/' => 'e',
'/Ĝ|Ğ|Ġ|Ģ/' => 'G',
'/ĝ|ğ|ġ|ģ/' => 'g',
'/Ĥ|Ħ/' => 'H',
'/ĥ|ħ/' => 'h',
'/Ì|Í|Î|Ï|Ĩ|Ī|Ĭ|Ǐ|Į|İ/' => 'I',
'/ì|í|î|ï|ĩ|ī|ĭ|ǐ|į|ı/' => 'i',
'/Ĵ/' => 'J',
'/ĵ/' => 'j',
'/Ķ/' => 'K',
'/ķ/' => 'k',
'/Ĺ|Ļ|Ľ|Ŀ|Ł/' => 'L',
'/ĺ|ļ|ľ|ŀ|ł/' => 'l',
'/Ñ|Ń|Ņ|Ň/' => 'N',
'/ñ|ń|ņ|ň|ʼn/' => 'n',
'/Ò|Ó|Ô|Õ|Ō|Ŏ|Ǒ|Ő|Ơ|Ø|Ǿ/' => 'O',
'/ò|ó|ô|õ|ō|ŏ|ǒ|ő|ơ|ø|ǿ|º/' => 'o',
'/Ŕ|Ŗ|Ř/' => 'R',
'/ŕ|ŗ|ř/' => 'r',
'/Ś|Ŝ|Ş|Ș|Š/' => 'S',
'/ś|ŝ|ş|ș|š|ſ/' => 's',
'/Ţ|Ț|Ť|Ŧ/' => 'T',
'/ţ|ț|ť|ŧ/' => 't',
'/Ù|Ú|Û|Ũ|Ū|Ŭ|Ů|Ű|Ų|Ư|Ǔ|Ǖ|Ǘ|Ǚ|Ǜ/' => 'U',
'/ù|ú|û|ũ|ū|ŭ|ů|ű|ų|ư|ǔ|ǖ|ǘ|ǚ|ǜ/' => 'u',
'/Ý|Ÿ|Ŷ/' => 'Y',
'/ý|ÿ|ŷ/' => 'y',
'/Ŵ/' => 'W',
'/ŵ/' => 'w',
'/Ź|Ż|Ž/' => 'Z',
'/ź|ż|ž/' => 'z',
'/Æ|Ǽ/' => 'AE',
'/ß/' => 'ss',
'/IJ/' => 'IJ',
'/ij/' => 'ij',
'/Œ/' => 'OE',
'/ƒ/' => 'f'
);
         $quotedReplacement = preg_quote($separator, '/');
         $merge = array(
                  '/[^\s\p{Zs}\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]/mu' => ' ',
                  '/[\s\p{Zs}]+/mu' => $separator,
 sprintf('/^[%s]+|[%s]+$/', $quotedReplacement, $quotedReplacement) => '',
  );
        $map = $_transliteration + $merge;
        unset($_transliteration);
        return preg_replace(array_keys($map), array_values($map), $string);
},

قدم پنجم: این کد هم برای کنترلر هستش که میتونید دیتارو اضافه کنید.

Post::create([ 
'user_id' => auth::user()->id,
'name' => $request->name,
'description' => $request->description,
 ]); 

نکته ی مهم: حالا شاید براتون سوال باشه که چرا توی قدم پنج slug نیستش یعنی آدرس از اینجا ذخیره نمیشه! خوب باید در جواب این سوال بهتون بگم که توی قدم سوم ما کد زیر داریم که توی مدل هستش.

public function sluggable(): array  {
      return [ 'slug' => [ 'source' => 'name' ] ];
 }


که گقتیم name هرچی باشه slug هم از اون باید استفاده کنه . این name هم همون دیتایی هستش که شما میخواید آدرس صفحه براساس اون ساخته بشه.

خوب کارامون تموم شد و شما میتونید آدرس فارسی ذخیره کنید.

امیدوارم که این مطلب براتون مفید واقع بشه. اگه سوالی داشتید و یا محتوای این پست اشکال داشت خوشحال میشم توی نظرات مطرح کنید.

ممنون بابت وقتی گذاشتید :)