برای اینکه بهتر متوجه منظورم بشین، به این دو مثال URL نگاه کنین:
https://www.faridaghili.ir/articles/142
https://www.faridaghili.ir/articles/ایجاد-اسلاگ-فارسی-در-لاراول
تو URL دوم از Slug به جای ID استفاده شده که چند مزیت داره. اولین نکته مثبت اینه که این لینک به لحاظ SEO وضعیت بهتری داره و برای موتورهای جستجو مناسبتره چون حاوی کلمات کلیدی موجود در اون صفحه هست، ضمن اینکه خوانایی بیشتری هم داره و با نگاه کردن به لینک میشه در مورد محتواش حدس زد.
مزیت بعدی اینه که در حالت دوم کسی نمیتونه با کم و زیاد کردن عدد ID در انتهای لینک اقدام به جمعآوری اطلاعات کلیه مطالب سایت کنه و به عبارتی در مقابل Web Scraping ایمنتره.
حالا که برخی مزایای استفاده از Slug در URLها رو مرور کردیم، اجازه بدین یه روش ساده و سریع برای رسیدن به این هدف بهتون معرفی کنم.
ابتدا پکیج pishran/laravel-persian-slug
رو با استفاده از دستور زیر به پروژهتون اضافه کنین:
composer require pishran/laravel-persian-slug
حالا کافیه Trait این پکیج رو به Modelهای مورد نظرتون اضافه کنین، برای مثال مدل Article رو در نظر بگیرین:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Pishran\LaravelPersianSlug\HasPersianSlug;
class Article extends Model
{
use HasPersianSlug;
}
در ادامه باید مشخص کنین که میخواین از کدوم Column برای تولید Slug استفاده بشه و اینکه میخواین Slug تولید شده تو کدوم Column ذخیره بشه. با فرض اینکه جدول مربوط به مدل Article دارای ستونهای title
و slug
هست، میتونیم به شکل زیر عمل کنیم:
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom('title')
->saveSlugsTo('slug');
}
نهایتا باید همچین کلاسی داشته باشین:
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Pishran\LaravelPersianSlug\HasPersianSlug;
use Spatie\Sluggable\SlugOptions;
class Article extends Model
{
use HasPersianSlug;
public function getSlugOptions(): SlugOptions
{
return SlugOptions::create()
->generateSlugsFrom('title')
->saveSlugsTo('slug');
}
}
در این حالت هر زمان که یک Article ایجاد یا ویرایش میکنین، بصورت خودکار و با لحاظ کردن کاراکترهای مجاز، یک عبارت مناسب از Title تولید و در Slug ذخیره میشه که میتونین با استفاده از Route Model Binding لاراول در Routeهای پروژه ازش استفاده کنین.
پیشنهاد میکنم برای کسب اطلاعات بیشتر و بررسی سایر امکانات به مخزن پکیج سر بزنید.
امیدوارم این مقاله براتون مفید باشه و باعث بشه وبسایتهای امنتر و بهینهتری رو توسعه بدین.