پکیج Laravel Addressable به هر مدل Eloquent قابلیت ذخیره آدرس میده — با پشتیبانی از آدرس فاکتور، ارسال، و کوئریهای جغرافیایی، همه با یه trait ساده.
Wirebones یه پکیج لاراوله که با رندر واقعی کامپوننت Livewire توی Chromium، فایل skeleton Blade رو بهصورت خودکار میسازه.
Laravel Shopper یه پنل مدیریت فروشگاهی متنباز و هدلسه که روی TALL Stack ساخته شده. بهجای اینکه یه استور آماده بهت بده، فقط روی بکآفیس تمرکز داره — مدیریت محصولات، سفارشها، مشتریها، تخفیفها و تیم. فرانتاندش کاملاً آزاده و میتونی با React، Vue، Svelte یا حتی Blade بسازیش. یه اینتگریشن Stripe آماده هم داره و با Laravel Boost از AI coding tools هم پشتیبانی میکنه.
لاراول ۱۳.۸ متدهای جدیدی برای بررسی یکجای همه صفها معرفی کرده که دیگه نیازی به چندین فراخوانی جداگانه نیست. علاوه بر این، رویدادهای جدید برای توقف و ازسرگیری worker، متد assertSessionMissingInput برای تست، و پشتیبانی از enum نوع SortDirection در query builder هم اضافه شدن. قابلیتهایی مثل فیلتر محیطی برای دستور schedule:list و اکشنهای سفارشی برای کلیدهای خارجی هم در این نسخه گنجونده شدن.
نشون دادن یه محتوای یکسان به همه کاربرا دیگه جواب نمیده. در این مقاله یاد میگیریم چطور یه موتور پیشنهاد محتوای هوشمند با لاراول، MongoDB و وکتور امبدینگ بسازیم که بهجای تگ و کلیدواژه، بر اساس «معنا» محتوا پیشنهاد میده. مثلاً کاربری که داره پست «شروع با لاراول API» رو میخونه، پستهایی مثل «احراز هویت در لاراول API» رو هم پیشنهاد میگیره؛ نه بهخاطر تشابه کلمات، بلکه بهخاطر نزدیکی مفهومی. این سیستم از مدل رایگان BAAI/bge-small-en-v1.5 روی Hugging Face و MongoDB Vector Search استفاده میکنه.
Laravel Brain یه پکیج برای لاراوله که کل چرخه درخواستهای اپلیکیشنت رو بهصورت یه گراف تعاملی و بصری نشون میده. روتها، کنترلرها، سرویسها، مدلها، جابها، ایونتها و خیلی چیزهای دیگه رو با هم میتونی ببینی و بررسی کنی. یه قابلیت جالب داره که کانتکست پروژهات رو برای ابزارهای هوش مصنوعی مثل Claude و Cursor آماده میکنه. همه اینا از طریق آدرس /_laravel-brain مستقیم توی خود اپت قابل دسترسه و نیازی به راهاندازی جداگانه نداره.
Chevere Workflow یه پکیج PHPه که بهت اجازه میده فرآیندهای چندمرحلهای رو بهصورت declarative تعریف کنی و وابستگیهای بین جابها رو مشخص کنی. موتور خودش گراف وابستگی رو میسازه و جابهای مستقل رو بهصورت موازی اجرا میکنه. پشتیبانی اولدرجه از لاراول هم داره و یه افزونه VS Code برای نمایش بصری گراف جریان کار ارائه میده. برای فرآیندهایی مثل ثبتنام کاربر که چند مرحله وابسته و مستقل دارن، ایدهآله.
لاراول قبل از اینکه درخواست به کنترلر برسه، یه سری کار جالب روی پارامترهای مسیر انجام میده. Route Binding یه قابلیت قدرتمنده که بخشهای خام URL رو به مدلهای Eloquent، Enum، یا مقادیر سفارشی تبدیل میکنه. این مقاله یه دایو عمیقه به این مکانیزم و نشون میده که دقیقاً پشت صحنه چه اتفاقی میافته. اگه همیشه از Route Binding استفاده میکردی ولی نمیدونستی چطور کار میکنه، این مطلب برات جذابه.
Observer و Event Listener هر دو برای «واکنش به اتفاقات» توی لاراول طراحی شدن، ولی هر کدوم جای مشخص خودشون رو دارن. Observer به چرخهی حیات مدلهای Eloquent گره خورده و بدون نیاز به فراخوانی دستی، رویدادهایی مثل created یا deleted رو مدیریت میکنه. Event Listener برای رویدادهای سطح بالاتر اپلیکیشن مثل ثبتنام کاربر یا ثبت سفارش به کار میاد و بهت اجازه میده چند کار مختلف رو بهصورت جداگانه و قابل تست انجام بدی. شناخت تفاوت این دو ابزار کمک میکنه کدت تمیزتر، مقیاسپذیرتر و قابل نگهداریتر بشه.
فلر یه پلتفرم مانیتورینگ فولاستک هست که مخصوص لاراول، PHP و جاوااسکریپت ساخته شده. با فلر میتونی خطاهای پروداکشن رو قبل از اینکه کاربرا باهاشون روبهرو بشن شناسایی و رفع کنی. علاوه بر ردیابی خطا، ابزارهای مانیتورینگ پرفورمنس هم داره که کمک میکنه کوئریهای کند و ریکوئستهای سنگین رو پیدا کنی. فلر با ابزارهایی مثل Slack، GitHub، Jira و Linear هم یکپارچه میشه و حتی از MCP Server برای اتصال به ابزارهای هوش مصنوعی پشتیبانی میکنه.
Paddle از صورتحساب مبتنی بر مصرف پشتیبانی میکنه، ولی پیادهسازی درستش خیلی پیچیدهتر از چیزیه که تبلیغاتش نشون میده. نیکلا بووه، سازندهی Phare، تجربهی مهاجرت از Stripe به Paddle رو با تمام دردسرهاش به اشتراک گذاشته. مشکل اصلی اینه که Paddle نه Meter API داره، نه grace period برای فاکتور، نه جمعآوری خودکار مصرف. راهحل؟ ترکیب زیرکانهای از zero-value subscription، one-time charge و یه سیستم دستساز برای مدیریت دورهی صدور فاکتور.
Route Binding یکی از قابلیتهای لاراوله که خیلی راحت ازش استفاده میکنیم، ولی کمتر پیش میاد بدونیم دقیقاً پشت صحنه چی میگذره. وقتی یه مسیر مثل /users/{user} تعریف میکنی و User $user رو در کنترلر type-hint میزنی، لاراول بهصورت خودکار مدل رو برات میآره. این اتفاق نه توی کنترلر، بلکه خیلی زودتر و در لایهی میانافزار SubstituteBindings رخ میده. این مقاله کل مسیر از URI خام تا تحویل مدل به کنترلر رو مرحلهبهمرحله توضیح میده و نشون میده explicit binding و implicit binding هر کدوم چه مسیری رو طی
Spatie در ۳۰ مارس ابزار جدیدی به اسم Scotty معرفی کرد که جایگزینی برای Laravel Envoy محسوب میشه. Scotty به جای فرمت Blade از سینتکس خالص bash استفاده میکنه و خروجی ترمینال بهمراتب بهتری داره. اگه روی سرورهای شخصی مثل DigitalOcean یا Hetzner دیپلوی میکنی، این ابزار یه ارتقای واقعی محسوب میشه. Scotty امکاناتی مثل جدول خلاصهی زمانبندی، pause/resume حین دیپلوی، دستور doctor برای بررسی پیشاز-دیپلوی، و حالت --pretend رو هم داره.
وقتی چند پروسه تست بهصورت موازی اجرا میشن و همه میخوان از یه دیتابیس مشترک استفاده کنن، کارها خراب میشه. یه راهحل ساده با file lock میشه این تداخل رو از بین برد. یه کلاس PHP کوچیک با flock میتونه دسترسی به دیتابیس رو ترتیببندی کنه تا هر پروسه نوبتی وارد بشه. این روش مخصوصاً برای feature testهایی که واقعاً با دیتابیس کار میکنن خیلی به درد میخوره.
چند ماه پیش یه آسیبپذیری RCE بحرانی توی Livewire v3 کشف شد که به مهاجمان ناشناس اجازه میداد کد دلخواه اجرا کنن. مشکل اصلی اینه که بین انتشار پچ و دیپلوی شدنش روی سرور، یه فاصله خطرناک وجود داره. با ترکیب پکیج spatie/laravel-health و سرویس Oh Dear میشه این فاصله رو به حداقل رسوند؛ بهطوری که هر دقیقه یهبار وضعیت پکیجهای نصبشده روی سرور چک میشه و اگه آسیبپذیری شناختهشدهای پیدا شد، فوری اعلان میرسه. این روش برعکس Dependabot که فقط ریپو رو اسکن میکنه، مستقیماً سرور پروداکشن رو زیر نظر دا
وقتی کاربر یه سبد خرید با چند آیتم ارسال میکنه، اعتبارسنجی هر product_id با Rule::exists بهصورت پیشفرض باعث N+1 کوئری میشه؛ یعنی برای هر آیتم یه SELECT جداگانه اجرا میشه. لاراول یه راهحل تمیز داره: دادههای موردنیاز رو قبل از اجرای rules() در متد prepareForValidation() با یه کوئری واحد prefetch کن و بعد هر آیتم رو در حافظه چک کن. اینطوری هم N+1 حذف میشه و هم پیغام خطا دقیقاً روی همون فیلد خاص (مثلاً items.2.product_id) نشون داده میشه.
هر بار که کسی میگه «PHP نمرده»، ناخواسته داره ایدهی مرگ PHP رو تو ذهن مخاطب تقویت میکنه. مغز انسان وقتی یه نفی رو پردازش میکنه، اول مفهوم اصلی رو فعال میکنه و بعد نفیش میکنه؛ یعنی کلمههای «PHP» و «dead» با هم تو ذهن ثبت میشن. راهحل اینه که به جای دفاع، روایت رو عوض کنیم و بگیم PHP داره شکوفا میشه. جامعهی PHP به جای رد کردن افسانهها، باید دستاوردها و هیجانهای این اکوسیستم رو جشن بگیره.
ایدمپوتنسی یه مفهوم کلیدی در طراحی APIهاست که تضمین میکنه اگه یه درخواست چند بار فرستاده بشه، نتیجهاش همیشه یکیه. این ویژگی بهخصوص وقتی شبکه قطع میشه یا کلاینت درخواست رو retry میکنه، از ایجاد دادههای تکراری یا عملیات ناخواسته جلوگیری میکنه. مقالهی Wendell Adriel از تئوری پشت این مفهوم شروع میکنه و تا پیادهسازی عملیش با پکیج Laravel Idempotency پیش میره.
TypeScript Transformer 3 بعد از سه سال بازنویسی کامل منتشر شد. این پکیج محبوب PHP حالا به یک فریمورک واقعی برای ایجاد پل بین PHP و TypeScript تبدیل شده. مهمترین تغییرات شامل حذف Collector ها، معرفی سیستم AST، پشتیبانی از PHPStan، و اضافه شدن حالت watch برای رصد تغییرات لحظهای فایلهاست. این نسخه توسعهپذیری را به شکل چشمگیری بهبود داده و امکانات خیلی بیشتری نسبت به نسخههای قبلی ارائه میده.
یه روش هوشمندانه برای کاهش چشمگیر زمان اجرای تستهای PHP روی GitHub Actions اینه که تستسوییت رو به چند بخش مساوی تقسیم کنی و هر بخش رو روی یه job جداگانه اجرا کنی. تیم Oh Dear با همین تکنیک، زمان اجرای تستهاشون رو از ۱۶ دقیقه به فقط ۴ دقیقه رسوندن. این کار با استفاده از matrix strategy در GitHub Actions و یه اسکریپت PHP سفارشی انجام میشه که تستها رو با گزینه --filter به صورت موازی اجرا میکنه. ابزار Pest هم با آپشن --list-tests این امکان رو میده که لیست کامل تستها رو بگیری و به قطعههای مس