Laravel Sluggable: اسلاگ خودکار با یک Attribute
خلاصهٔ کاملتر
نونو مادورو، چهرهی شناختهشدهی دنیای لاراول، یه پکیج جدید به اسم Laravel Sluggable منتشر کرده که کار تولید اسلاگ رو توی مدلهای Eloquent به یه روش تمیز و مدرن انجام میده. این پکیج به جای اینکه از Trait یا کلاس پایه استفاده کنه، از یه PHP Attribute ساده به اسم #[Sluggable] بهره میبره که مستقیماً روی کلاس مدل قرار میگیره.
نصب پکیج از طریق Composer انجام میشه و یه دستور Artisan به اسم make:sluggable هم داره که خیلی کارها رو اتوماتیک میکنه. این دستور ساختار جدول مدل رو میخونه، مناسبترین ستون منبع (مثل title، name یا headline) رو انتخاب میکنه، attribute رو به مدل اضافه میکنه و یه migration هم میسازه.
بعد از راهاندازی، تولید اسلاگ کاملاً خودکاره. مثلاً وقتی یه پست با عنوان «Laravel News Rocks» میسازی، اسلاگ «laravel-news-rocks» به صورت خودکار تولید و ذخیره میشه. هیچ کد اضافهای لازم نیست.
یکی از نقاط قوت این پکیج اینه که تنظیمات مختلفی داره که همهشون روی همون attribute مشخص میشن. مثلاً میتونی چندین ستون رو به عنوان منبع اسلاگ ترکیب کنی، مثلاً first_name و last_name رو کنار هم بذاری تا یه اسلاگ مثل «john-tolkien» بسازه.
برای اپلیکیشنهای multi-tenant یا هر جایی که نیاز به یکتایی اسلاگ در یه محدودهی مشخص داری، میتونی یه scope column تعریف کنی. مثلاً با scope: 'team_id' مطمئن میشی که اسلاگها در سطح هر تیم یکتا باشن، نه در سطح کل جدول. گزینههای دیگهای مثل maxLength، separator و onUpdating هم وجود دارن که انعطاف بیشتری میدن.
مدیریت خطا هم توی این پکیج خوب فکر شده. اگه اسلاگ نتونه تولید بشه، یه CouldNotGenerateSlugException پرتاب میشه که در محیط HTTP به صورت خودکار به یه پاسخ 422 تبدیل میشه و چون از ValidationException ارث میبره، توی لاگهای اپلیکیشن ظاهر نمیشه.
پشتیبانی از یونیکد هم یه ویژگی مهم این پکیجه. اسکریپتهای غیر لاتین مثل عربی، فارسی و حروف CJK (چینی، ژاپنی، کرهای) به اسلاگهای خوانای لاتین تبدیل میشن. ضمناً مقادیری که شبیه hostname یا file path هستن به درستی مدیریت میشن و نقطههاشون حفظ میشه.
نکات کلیدی:
- استفاده از PHP Attribute به جای Trait — کد تمیزتر و مدرنتر
- دستور make:sluggable برای راهاندازی سریع و خودکار
- پشتیبانی از منابع چندستونی برای ساخت اسلاگ
- مدیریت یکتایی اسلاگ در سطح tenant یا locale با scope
- تبدیل خودکار یونیکد، فارسی و CJK به اسلاگ لاتین
- مدیریت هوشمند خطا با پاسخ 422 در HTTP بدون لاگ شدن
- نیاز به PHP 8.5+ و Laravel 13.5+




