تفاوت Laravel 12 و Laravel 13

Laravel 13 نسبت به Laravel 12 یک نسخه کاملاً انقلابی نیست، اما چند تغییر مهم دارد که برای پروژه‌های واقعی ارزش بررسی دارند. اگر با Laravel 12 کار می‌کنید، ارتقا به Laravel 13 معمولاً سخت نیست، اما قبل از آپدیت باید تفاوت‌های اصلی، نیازمندی‌های نسخه جدید و قابلیت‌های تازه آن را بشناسید.

در این مقاله تفاوت Laravel 12 و Laravel 13 را از نظر PHP Version، قابلیت‌های AI، ساختار API، Queue، Cache، Attributeها و چند مثال کد بررسی می‌کنیم.

Laravel 12 بیشتر یک نسخه پایدارسازی بود

Laravel 12 ادامه‌دهنده مسیر Laravel 11 بود و بیشتر روی به‌روزرسانی وابستگی‌ها، بهبود Starter Kitها و کم کردن Breaking Change تمرکز داشت.

در این نسخه، Starter Kitهای جدید برای React، Vue، Svelte و Livewire معرفی شدند و توسعه‌دهندگان می‌توانستند سریع‌تر پروژه‌های مدرن را با Authentication آماده شروع کنند.

Laravel 13 چه تفاوتی ایجاد کرد؟

Laravel 13 همچنان تلاش کرده Breaking Change زیادی ایجاد نکند، اما چند قابلیت مهم به فریمورک اضافه شده است. مهم‌ترین تفاوت‌ها شامل نیاز به PHP 8.3، معرفی Laravel AI SDK، پشتیبانی بهتر از JSON، قابلیت‌های Semantic Search، Queue Routing و استفاده گسترده‌تر از PHP Attributeها است.

تفاوت اول: حداقل نسخه PHP

یکی از مهم‌ترین تفاوت‌های Laravel 12 و Laravel 13، نسخه PHP مورد نیاز است. Laravel 12 از PHP 8.2 به بالا پشتیبانی می‌کند، اما Laravel 13 حداقل به PHP 8.3 نیاز دارد.

{ "require": { "php": "^8.3", "laravel/framework": "^13.0" } }

اگر پروژه شما هنوز روی PHP 8.2 اجرا می‌شود، قبل از ارتقا به Laravel 13 باید نسخه PHP سرور، Docker Image یا محیط Local خود را به PHP 8.3 یا بالاتر ارتقا دهید.

تفاوت دوم: Laravel AI SDK

یکی از جذاب‌ترین قابلیت‌های Laravel 13، اضافه شدن Laravel AI SDK به‌عنوان ابزار First-party برای ساخت قابلیت‌های هوش مصنوعی است.

در Laravel 12 برای اتصال به سرویس‌های AI معمولاً نیاز به پکیج‌های جانبی یا پیاده‌سازی دستی API داشتیم، اما Laravel 13 تلاش می‌کند این تجربه را Laravel-native کند.

use App\Ai\Agents\ContentAssistant; $response = ContentAssistant::make() ->prompt('Generate an SEO outline for a Laravel article.'); return (string) $response;

این قابلیت برای پروژه‌هایی مثل تولید محتوا، چت‌بات، تحلیل متن، ساخت Embedding، جستجوی معنایی و ابزارهای Agentic کاربرد زیادی دارد.

تفاوت سوم: JSON Resources

در Laravel 13 پشتیبانی First-party از JSON Resources اضافه شده است. این موضوع برای پروژه‌هایی که API استاندارد، ساختارمند و قابل توسعه دارند اهمیت زیادی دارد.

در Laravel 12 معمولاً برای ساخت خروجی‌های سازگار با JSON باید یا Serializer اختصاصی می‌نوشتیم یا از پکیج‌های جانبی استفاده می‌کردیم.

use App\Models\Post; use App\Http\Resources\PostResource; Route::get('/api/posts/{post}', function (Post $post) { return PostResource::make($post); });

مزیت JSON این است که ساختار خروجی API، رابطه‌ها، لینک‌ها و متادیتاها قابل پیش‌بینی‌تر می‌شوند؛ مخصوصاً در پروژه‌هایی که Frontend جداگانه با React، Vue یا Next.js دارند.

تفاوت چهارم: Queue Routing

در Laravel 13 امکان تعریف Route برای Jobها در Queue اضافه شده است. این یعنی می‌توان مشخص کرد یک Job خاص به‌صورت پیش‌فرض روی چه Connection و Queue اجرا شود.

use Illuminate\Support\Facades\Queue; use App\Jobs\ProcessPodcast; Queue::route( ProcessPodcast::class, connection: 'redis', queue: 'podcasts' );

در Laravel 12 معمولاً این تنظیمات را هنگام Dispatch کردن Job یا داخل خود Job مدیریت می‌کردیم. اما در Laravel 13 می‌توان این منطق را متمرکزتر و خواناتر کرد.

تفاوت پنجم: تغییر Prefixهای Cache و Session

در Upgrade Guide لاراول 13 اشاره شده که Prefixهای پیش‌فرض Cache و Redis و نام Cookie مربوط به Session تغییر کرده‌اند. این تغییر برای همه پروژه‌ها اثرگذار نیست، اما اگر پروژه شما به مقدارهای پیش‌فرض فریمورک وابسته باشد، باید آن را بررسی کنید.

// Laravel 12 Str::slug((string) env('APP_NAME', 'laravel'), '_').'_cache_'; Str::slug((string) env('APP_NAME', 'laravel'), '_').'_session'; // Laravel 13 Str::slug((string) env('APP_NAME', 'laravel')).'-cache-'; Str::slug((string) env('APP_NAME', 'laravel')).'-session';

  برای جلوگیری از رفتار غیرمنتظره، بهتر است مقدارهای زیر را به‌صورت explicit در فایل .env تعریف کنید.

CACHE_PREFIX=my_app_cache REDIS_PREFIX=my_app_database SESSION_COOKIE=my_app_session

تفاوت ششم: Attributeهای بیشتر در Laravel 13

Laravel 13 استفاده از PHP Attributeها را گسترده‌تر کرده است. Attributeها باعث می‌شوند بعضی تنظیمات نزدیک‌تر به همان کلاس یا متدی قرار بگیرند که به آن مربوط هستند.

use Illuminate\Routing\Attributes\Middleware; #[Middleware('auth')] class DashboardController { public function __invoke() { return view('dashboard'); } }

این سبک کدنویسی برای پروژه‌های بزرگ می‌تواند خوانایی را بهتر کند، چون بخشی از تنظیمات رفتاری کلاس دقیقاً کنار همان کلاس قرار می‌گیرد.

آیا باید از Laravel 12 به Laravel 13 ارتقا بدهیم؟

اگر پروژه شما Stable است و نیازی به قابلیت‌های جدید ندارید، Laravel 12 هنوز انتخاب مناسبی است. اما اگر پروژه جدید شروع می‌کنید یا به قابلیت‌هایی مثل AI SDK، JSON، Semantic Search و Queue Routing نیاز دارید، Laravel 13 انتخاب بهتری خواهد بود.

برای پروژه‌های Production، قبل از ارتقا این موارد را بررسی کنید:

  • نسخه PHP سرور
  • نسخه پکیج‌های Composer
  • سازگاری پکیج‌های جانبی
  • تست‌های Feature و Unit
  • تنظیمات Cache، Session و Queue
  • محیط Docker یا CI/CD

جمع‌بندی

Laravel 12 بیشتر روی پایداری، Starter Kitهای جدید و بهبود تجربه شروع پروژه تمرکز داشت. در مقابل، Laravel 13 با اضافه کردن قابلیت‌هایی مثل AI SDK، JSON، Queue Routing، Semantic Search و Attributeهای بیشتر، مسیر Laravel را به سمت اپلیکیشن‌های مدرن‌تر و هوشمندتر برده است.

اگر پروژه شما روی Laravel 12 است، ارتقا به Laravel 13 معمولاً پیچیده نیست، اما باید قبل از آپدیت، نسخه PHP و پکیج‌های وابسته را بررسی کنید. برای پروژه‌های جدید، Laravel 13 انتخاب آینده‌نگرانه‌تری است؛ مخصوصاً اگر می‌خواهید API استاندارد، قابلیت‌های AI یا معماری Queue پیشرفته‌تری داشته باشید.