لاراول مقدمات و آشنایی با لاراول تاریخچه نسخه‌های لاراول: از لاراول ۱ تا لاراول ۱۳

تاریخچه نسخه‌های لاراول: از لاراول ۱ تا لاراول ۱۳

فهرست مطالب

مقدمه: تولد یک فریم‌ورک انقلابی

لاراول (Laravel) یک فریم‌ورک متن‌باز PHP است که تحت مجوز MIT منتشر شده و توسط تیلور اوتول (Taylor Otwell)، توسعه‌دهنده آمریکایی که پیش‌تر در مایکروسافت روی دات‌نت کار می‌کرد، خلق شده است . اولین نسخه بتای لاراول در ۹ ژوئن ۲۰۱۱ منتشر شد و نسخه ۱ رسمی در اواخر همان ماه در دسترس قرار گرفت .

فلسفه اصلی تیلور اوتول از خلق لاراول، ارائه یک جایگزین پیشرفته‌تر و گویاتر (Expressive) برای CodeIgniter بود – فریم‌ورکی که در آن زمان بسیار محبوب بود اما ویژگی‌های حیاتی مانند سیستم احراز هویت (Authentication) داخلی و مسیریابی (Routing) پیشرفته را پشتیبانی نمی‌کرد .

شعار همیشگی لاراول: "The PHP Framework for Web Artisans" – فریم‌ورک PHP برای هنرمندان وب. این شعار نشان‌دهنده تمرکز لاراول بر زیبایی کد، خوانایی، و تجربه لذت‌بخش توسعه‌دهندگی است.

امروزه لاراول به محبوب‌ترین فریم‌ورک PHP تبدیل شده و رکورد بیشترین تعداد ستاره در گیت‌هاب را در میان فریم‌ورک‌های بک‌اند PHP، Ruby و Python در اختیار دارد . این موفقیت مرهون جامعه فعال، اکوسیستم غنی پکیج‌ها، و انتشار منظم نسخه‌های جدید (تقریباً هر ۱۲ ماه یک نسخه اصلی) است.


لاراول ۱ (ژوئن ۲۰۱۱): اولین گام‌ها

نسخه PHP موردنیاز: اطلاعات دقیق در دسترس نیست تاریخ انتشار: ژوئن ۲۰۱۱ وضعیت: پایان عمر (End of Life)

اولین نسخه لاراول با مجموعه‌ای از ویژگی‌های پایه اما ضروری متولد شد:

نکته جالب توجه: لاراول ۱ علیرغم داشتن Model و View، کنترلر (Controller) نداشت و به همین دلیل از نظر فنی یک فریم‌ورک کامل MVC محسوب نمی‌شد . همچنین خبری از Composer نبود – مدیر بسته‌ای که بعدها انقلابی در اکوسیستم PHP ایجاد کرد .


لاراول ۲ (سپتامبر ۲۰۱۱): تکمیل معماری MVC

نسخه PHP موردنیاز: اطلاعات دقیق در دسترس نیست تاریخ انتشار: سپتامبر ۲۰۱۱ وضعیت: پایان عمر (End of Life)

تنها سه ماه پس از نسخه اول، لاراول ۲ با بهبودهای قابل توجهی از راه رسید :

تغییر بحث‌برانگیز: پشتیبانی از پکیج‌های شخص ثالث (Third-party Packages) در این نسخه حذف شد . این تصمیم بعداً با معرفی Composer در لاراول ۴ به شکل کاملاً متفاوتی جبران شد.


لاراول ۳ (فوریه ۲۰۱۲): ظهور Artisan و مهاجرت‌ها

نسخه PHP موردنیاز: اطلاعات دقیق در دسترس نیست تاریخ انتشار: فوریه ۲۰۱۲ وضعیت: پایان عمر (End of Life)

لاراول ۳ نقطه عطفی در محبوبیت این فریم‌ورک بود. ویژگی‌های جدید این نسخه شامل :

افزایش چشمگیر محبوبیت: انتشار لاراول ۳ همزمان با رشد قابل توجه جامعه کاربری و محبوبیت این فریم‌ورک بود .


لاراول ۴ (می ۲۰۱۳): بازنویسی عظیم با Composer

نسخه PHP موردنیاز: ۵.۳ و بالاتر تاریخ انتشار: می ۲۰۱۳ (بازنویسی کامل با اسم رمز Illuminate) وضعیت: پایان عمر (End of Life)

لاراول ۴ یک بازنویسی کامل از صفر بود و ساختار فریم‌ورک را به مجموعه‌ای از پکیج‌های مجزا تبدیل کرد که از طریق Composer توزیع می‌شدند . این تغییر بنیادین، قابلیت گسترش‌پذیری لاراول را به شدت افزایش داد.

نوآوری‌های کلیدی لاراول ۴:


لاراول ۵ (فوریه ۲۰۱۵): عصر جدید ساختار دایرکتوری

نسخه PHP موردنیاز: ۵.۴ و بالاتر (نسخه‌های بعدی تا ۷.۰ افزایش یافت) تاریخ انتشار سری ۵: فوریه ۲۰۱۵ تا ۲۰۱۹ وضعیت: پایان عمر (End of Life)

لاراول ۵ در اصل قرار بود نسخه ۴.۳ باشد، اما حجم تغییرات به حدی زیاد بود که تیم توسعه تصمیم به افزایش شماره نسخه اصلی گرفت . این سری تغییرات عمیقی در ساختار پروژه‌های لاراول ایجاد کرد.

نسخه‌های شاخص سری ۵:

نسخه تاریخ انتشار ویژگی‌های شاخص
۵.۰ فوریه ۲۰۱۵ ساختار جدید دایرکتوری، Scheduler برای زمان‌بندی وظایف، Flysystem
۵.۱ ژوئن ۲۰۱۵ اولین نسخه LTS (پشتیبانی بلندمدت)
۵.۳ آگوست ۲۰۱۶ Laravel Echo، Notification System، Scout
۵.۴ ژانویه ۲۰۱۷ Laravel Dusk، Laravel Mix، Blade Components & Slots
۵.۵ آگوست ۲۰۱۷ نسخه LTS دوم، معرفی Package Auto-Discovery
۵.۶ فوریه ۲۰۱۸ Eloquent Date Casts، Argon2 Password Hashing
۵.۷ سپتامبر ۲۰۱۸ Email Verification، Guest User Gates
۵.۸ فوریه ۲۰۱۹ Eloquent Has-One-Through، بهبودهای Blade

مهم‌ترین دستاوردهای سری ۵:


لاراول ۶ (سپتامبر ۲۰۱۹): ورود به Semantic Versioning

نسخه PHP موردنیاز: ۷.۲ و بالاتر تاریخ انتشار: ۳ سپتامبر ۲۰۱۹ وضعیت: پایان عمر (EOL: فوریه ۲۰۲۲ برای LTS)

لاراول ۶ تغییر مهمی در استراتژی نسخه‌بندی ایجاد کرد: مهاجرت به Semantic Versioning (SemVer) . این یعنی شماره نسخه‌ها دیگر بر اساس ویژگی‌های جدید افزایش نمی‌یافتند، بلکه تغییرات شکست‌دهنده (Breaking Changes) معیار اصلی بودند.

ویژگی‌های مهم لاراول ۶:


لاراول ۷ (مارس ۲۰۲۰): Sanctum و Blade Components

نسخه PHP موردنیاز: ۷.۲.۵ و بالاتر تاریخ انتشار: ۳ مارس ۲۰۲۰ وضعیت: پایان عمر

معرفی‌های انقلابی:


لاراول ۸ (سپتامبر ۲۰۲۰): Jetstream و کلاس‌های Factory

نسخه PHP موردنیاز: ۷.۳ و بالاتر تاریخ انتشار: ۸ سپتامبر ۲۰۲۰ وضعیت: پایان عمر (EOL: مارس ۲۰۲۳)

تغییرات بزرگ و گاهی بحث‌برانگیز:

تغییر ساختاری مهم: تغییر نحوه تعریف Model Factories از متد factory() قدیمی به کلاس‌های HasFactory یکی از بزرگترین تغییرات شکست‌دهنده در تاریخ لاراول بود که نیازمند بازنویسی گسترده تست‌ها در پروژه‌های موجود شد.


لاراول ۹ (فوریه ۲۰۲۲): مهاجرت به PHP 8

نسخه PHP موردنیاز: ۸.۰ و بالاتر تاریخ انتشار: ۸ فوریه ۲۰۲۲ وضعیت: پایان عمر (EOL: آگوست ۲۰۲۴)

لاراول ۹ سرانجام پشتیبانی از PHP 7 را به طور کامل قطع کرد و حداقل نسخه PHP به ۸.۰ افزایش یافت. همچنین این نسخه برخلاف برنامه اولیه، LTS نبود .

ویژگی‌های کلیدی:


لاراول ۱۰ (فوریه ۲۰۲۳): تثبیت و پالایش

نسخه PHP موردنیاز: ۸.۱ و بالاتر تاریخ انتشار: ۱۴ فوریه ۲۰۲۳ وضعیت: پایان عمر (EOL: فوریه ۲۰۲۵)

لاراول ۱۰ یک نسخه تثبیت‌کننده (Stabilization Release) بود که تمرکز کمتری بر ویژگی‌های بزرگ جدید و بیشتر بر پالایش کدبیس و حذف کدهای منسوخ داشت .

تغییرات قابل توجه:


لاراول ۱۱ (مارس ۲۰۲۴): حذف Kernel و ساده‌سازی

نسخه PHP موردنیاز: ۸.۲ و بالاتر تاریخ انتشار: ۱۲ مارس ۲۰۲۴ وضعیت: دریافت به‌روزرسانی امنیتی تا مارس ۲۰۲۶

لاراول ۱۱ با حذف فایل‌های HTTP Kernel و Console Kernel، ساختار پروژه را به شدت ساده‌تر کرد و پیکربندی‌ها را به bootstrap/app.php منتقل نمود.

نوآوری‌های کلیدی:


لاراول ۱۲ (فوریه ۲۰۲۵): مسیر به سوی هوش مصنوعی

نسخه PHP موردنیاز: ۸.۲ و بالاتر (پشتیبانی تا ۸.۵) تاریخ انتشار: ۲۴ فوریه ۲۰۲۵ وضعیت: دریافت باگ فیکس تا آگوست ۲۰۲۶، امنیتی تا فوریه ۲۰۲۷

لاراول ۱۲ پلی به سوی عصر هوش مصنوعی بود و زیرساخت‌های لازم برای Laravel AI SDK را فراهم کرد .

ویژگی‌های مهم:


لاراول ۱۳ (مارس ۲۰۲۶): جهش به عصر هوش مصنوعی

آخرین نسخه پایدار (Current Stable): این بخش به تفصیل به بررسی نسخه ۱۳ لاراول می‌پردازد که جدیدترین نسخه اصلی در زمان نگارش این مستند است.

نسخه PHP موردنیاز: ۸.۳ و بالاتر (پشتیبانی تا ۸.۵) تاریخ انتشار: ۱۷ مارس ۲۰۲۶ وضعیت: دریافت باگ فیکس تا Q3 ۲۰۲۷، امنیتی تا مارس ۲۰۲۸

فلسفه نسخه ۱۳: ارتقای آسان، قابلیت‌های عظیم

تیلور اوتول و تیم لاراول در نسخه ۱۳ رویکرد متفاوتی اتخاذ کردند: حداقل تغییرات شکست‌دهنده (Minimal Breaking Changes) همراه با ارائه قابلیت‌های انقلابی به صورت اختیاری (Optional Revolutionary Features) .

"بخش عمده تمرکز ما در این چرخه انتشار، به حداقل رساندن تغییرات شکست‌دهنده معطوف بوده است. در عوض، ما خود را وقف ارائه بهبودهای مستمر کیفیت زندگی (Quality-of-Life Improvements) در طول سال کرده‌ایم که برنامه‌های موجود را دچار اختلال نمی‌کنند." – تیم لاراول

این یعنی می‌توانید پروژه لاراول ۱۲ خود را با کمترین تغییر در کد به نسخه ۱۳ ارتقا دهید، اما در عین حال به دریایی از قابلیت‌های جدید – به ویژه در حوزه هوش مصنوعی – دسترسی پیدا کنید.

حداقل نسخه PHP: ۸.۳

لاراول ۱۳ پشتیبانی از PHP 8.2 را متوقف کرده و اکنون به PHP 8.3 یا بالاتر نیاز دارد .

مزایای این ارتقا:

توجه به تغییرات عمده: در نسخه ۱۳، پشتیبانی از PHP 8.2 متوقف شده است. اگر پروژه شما هنوز روی PHP 8.2 اجرا می‌شود، ابتدا باید سرور خود را ارتقا دهید. همچنین پلی‌فیل‌های قدیمی حذف شده‌اند که باعث کاهش حجم و افزایش سرعت فریم‌ورک شده است .

ویژگی‌های جدید لاراول ۱۳

۱. پشتیبانی درجه یک از PHP Attributes

بزرگ‌ترین بهبود تجربه توسعه‌دهندگی در لاراول ۱۳، معرفی Native PHP Attributes در بیش از ۱۵ بخش مختلف فریم‌ورک است . این ویژگی کاملاً اختیاری و سازگار با کدهای قدیمی است.

نمونه استفاده در Eloquent Models:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Attributes\Hidden;
use Illuminate\Database\Eloquent\Attributes\Table;
use Illuminate\Foundation\Auth\User as Authenticatable;

#[Table('users', key: 'user_id', keyType: 'string', incrementing: false)]
#[Hidden(['password', 'remember_token'])]
#[Fillable(['name', 'email', 'password'])]
class User extends Authenticatable
{
    // بدنه کلاس می‌تواند خالی باشد یا شامل متدهای سفارشی شما
}

قبلاً این تنظیمات به صورت propertyهای protected داخل کلاس تعریف می‌شدند:

// روش قدیمی (هنوز هم معتبر است)
class User extends Authenticatable
{
    protected $table = 'users';
    protected $primaryKey = 'user_id';
    protected $keyType = 'string';
    public $incrementing = false;

    protected $hidden = ['password', 'remember_token'];
    protected $fillable = ['name', 'email', 'password'];
}

نمونه استفاده در Queue Jobs:

<?php

namespace App\Jobs;

use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
use Illuminate\Queue\Attributes\MaxExceptions;
use Illuminate\Queue\Attributes\Tries;
use Illuminate\Queue\Attributes\Timeout;
use Illuminate\Queue\Attributes\FailOnTimeout;
use Illuminate\Queue\Attributes\Backoff;

#[Tries(5)]
#[MaxExceptions(3)]
#[Timeout(60)]
#[FailOnTimeout]
#[Backoff([10, 30, 60])]
class ProcessPodcast implements ShouldQueue
{
    use Queueable;

    public function handle(): void
    {
        // منطق پردازش پادکست
    }
}

نمونه استفاده در Controllers:

<?php

namespace App\Http\Controllers;

use App\Models\Flight;
use Illuminate\Routing\Attributes\Controllers\Authorize;
use Illuminate\Routing\Attributes\Controllers\Middleware;

#[Middleware('auth')]
class FlightController extends Controller
{
    #[Middleware(LogRequests::class)]
    #[Authorize('view', 'flight')]
    public function show(Flight $flight)
    {
        return view('flights.show', compact('flight'));
    }
}

قابلیت پیشرفته PHP 8.5: در PHP 8.5 می‌توانید از Closureها مستقیماً در Attributeها استفاده کنید :

#[Middleware(static function (Request $request, Closure $next) {
    info('Request logged via Attribute Closure');
    return $next($request);
})]
public function show(Flight $flight) { }

۲. Laravel AI SDK (نسخه پایدار)

لاراول ۱۳ با Laravel AI SDK رسمی و پایدار عرضه می‌شود – یک API یکپارچه برای کار با سرویس‌های هوش مصنوعی مختلف .

قابلیت‌های AI SDK:

نمونه کد – ساخت یک Agent هوشمند:

<?php

namespace App\Ai\Agents;

use Laravel\Ai\Agent;
use Laravel\Ai\Tool;

class SalesCoach extends Agent
{
    protected string $model = 'gpt-4-turbo';

    protected array $tools = [
        CalculateCommission::class,
        AnalyzeSalesScript::class,
        GenerateFollowUpEmail::class,
    ];

    protected string $systemPrompt = <<<EOT
        شما یک مربی فروش حرفه‌ای هستید. وظیفه شما تحلیل متون مکالمات فروش،
        ارائه بازخورد سازنده، و پیشنهاد استراتژی‌های بهبود است.
    EOT;
}

// استفاده از Agent
use App\Ai\Agents\SalesCoach;

$response = SalesCoach::make()->prompt('Analyze this sales transcript: ' . $transcript);
$analysis = (string) $response;

// ذخیره تحلیل در دیتابیس
SalesCallAnalysis::create([
    'call_id' => $callId,
    'ai_analysis' => $analysis,
    'generated_at' => now(),
]);

نمونه کد – تولید تصویر:

<?php

use Laravel\Ai\Image;
use App\Models\Product;
use Illuminate\Support\Facades\Storage;

class ProductImageGenerator
{
    public function generateForProduct(Product $product): string
    {
        $prompt = sprintf(
            'Professional product photography of %s %s on white background, studio lighting',
            $product->brand,
            $product->name
        );

        $image = Image::of($prompt)
            ->size(1024, 1024)
            ->quality('hd')
            ->generate();

        $path = 'products/ai-generated/' . $product->id . '.png';
        Storage::disk('public')->put($path, (string) $image);

        return Storage::url($path);
    }
}

نمونه کد – تولید Embedding برای جستجوی معنایی:

<?php

use Illuminate\Support\Str;
use App\Models\Document;

class DocumentIndexer
{
    public function index(Document $document): void
    {
        // تولید embedding از محتوای سند
        $embeddings = Str::of($document->content)->toEmbeddings();

        // ذخیره برای جستجوی برداری
        $document->embeddings()->create([
            'vector' => $embeddings,
            'model' => 'text-embedding-3-small',
        ]);
    }
}

۳. JSON:API Resources داخلی

لاراول ۱۳ اکنون به صورت پیش‌فرض از JSON:API specification پشتیبانی می‌کند . این یعنی می‌توانید APIهایی کاملاً منطبق با استاندارد JSON:API بسازید بدون نیاز به پکیج‌های شخص ثالث.

قابلیت‌های کلیدی:

<?php

namespace App\Http\Resources;

use Illuminate\Http\JsonApi\JsonApiResource;

class ArticleResource extends JsonApiResource
{
    public function toArray($request): array
    {
        return [
            'type' => 'articles',
            'id' => (string) $this->id,
            'attributes' => [
                'title' => $this->title,
                'body' => $this->body,
                'createdAt' => $this->created_at->toISOString(),
                'updatedAt' => $this->updated_at->toISOString(),
            ],
            'relationships' => [
                'author' => [
                    'data' => [
                        'type' => 'users',
                        'id' => (string) $this->user_id,
                    ],
                ],
                'comments' => $this->whenLoaded('comments', function () {
                    return [
                        'links' => [
                            'related' => route('articles.comments', $this->id),
                        ],
                    ];
                }),
            ],
            'links' => [
                'self' => route('articles.show', $this->id),
            ],
        ];
    }
}

// استفاده در کنترلر
class ArticleController extends Controller
{
    public function show(Article $article): JsonApiResource
    {
        $article->load('author');

        return new ArticleResource($article);
    }
}

۴. مسیریابی صف (Queue Routing)

لاراول ۱۳ امکان تعریف قوانین مسیریابی صف بر اساس کلاس Job را فراهم می‌کند . این ویژگی مدیریت متمرکز اتصالات (Connections) و صف‌ها (Queues) را بسیار ساده‌تر می‌کند.

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Queue;
use App\Jobs\ProcessPodcast;
use App\Jobs\GenerateReport;
use App\Jobs\SendWelcomeEmail;

class QueueRoutingServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        // مسیریابی Jobهای پردازش سنگین به Redis
        Queue::route(ProcessPodcast::class, connection: 'redis', queue: 'heavy-processing');

        // مسیریابی گزارش‌ها به صف اختصاصی با اولویت بالا
        Queue::route(GenerateReport::class, connection: 'redis', queue: 'reports');

        // ایمیل‌ها روی connection پیش‌فرض ولی صف جداگانه
        Queue::route(SendWelcomeEmail::class, queue: 'emails');

        // تعیین حداکثر تعداد تلاش برای نوع خاصی از Job
        Queue::route(ProcessPodcast::class, tries: 5);
    }
}

لاراول ۱۳ با پشتیبانی داخلی از جستجوی برداری با PostgreSQL + pgvector، ساخت تجربه‌های جستجوی مبتنی بر هوش مصنوعی را ساده‌تر کرده است .

<?php

namespace App\Services;

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;

class SemanticSearchService
{
    public function searchSimilarDocuments(string $query, int $limit = 10)
    {
        // اجرای جستجوی تشابه معنایی مستقیماً با Query Builder
        return DB::table('documents')
            ->whereVectorSimilarTo('embedding', $query)
            ->limit($limit)
            ->get();
    }

    public function hybridSearch(string $query, int $limit = 10)
    {
        // ترکیب جستجوی معنایی و جستجوی full-text سنتی
        return DB::table('documents')
            ->whereVectorSimilarTo('embedding', $query)
            ->whereFullText('content', $query)
            ->orderByRaw('
                (vector_similarity(embedding, ?) * 0.7) + 
                (MATCH(content) AGAINST(? IN NATURAL LANGUAGE MODE) * 0.3) DESC
            ', [$query, $query])
            ->limit($limit)
            ->get();
    }
}

// نمونه migration برای ستون embedding
Schema::create('documents', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->text('content');
    $table->vector('embedding', 1536); // برای OpenAI text-embedding-3-small
    $table->fullText('content');
    $table->timestamps();
});

// ایندکس برای جستجوی سریع‌تر
Schema::table('documents', function (Blueprint $table) {
    $table->index('embedding', 'documents_embedding_idx', 'ivfflat');
});

۶. متد Cache::touch()

لاراول ۱۳ متد جدید Cache::touch() را معرفی کرده که امکان تمدید TTL کش بدون خواندن یا بازنویسی مقدار را فراهم می‌کند .

مزیت عملکردی: قبلاً برای تمدید TTL نیاز به get() و سپس put() داشتید که باعث انتقال غیرضروری داده روی شبکه می‌شد. Cache::touch() این مرحله را حذف می‌کند – Redis از دستور EXPIRE، Memcached از TOUCH، و Database Driver از یک UPDATE ساده استفاده می‌کند .

<?php

namespace App\Services;

use Illuminate\Support\Facades\Cache;

class SessionManager
{
    // تمدید session کش با ثانیه
    public function extendSession(string $sessionId): bool
    {
        return Cache::touch('user_session:' . $sessionId, 3600);
    }

    // تمدید با DateTime
    public function extendAnalyticsCache(): bool
    {
        return Cache::touch('analytics_data', now()->addHours(6));
    }

    // تبدیل به کش دائمی (حذف انقضا)
    public function makePermanent(string $key): bool
    {
        return Cache::touch($key, null);
    }

    // الگوی Sliding Session
    public function handleUserActivity(string $userId): void
    {
        $sessionKey = "user_activity:{$userId}";

        if (Cache::has($sessionKey)) {
            // کاربر فعال است – فقط TTL را تمدید کن
            Cache::touch($sessionKey, 300); // ۵ دقیقه دیگر
        } else {
            // اولین فعالیت – session جدید بساز
            Cache::put($sessionKey, ['last_seen' => now()], 300);
        }
    }
}

۷. Reverb Database Driver

پیش از این، برای مقیاس‌پذیری افقی Laravel Reverb (سرور WebSocket لاراول) به Redis نیاز داشتید. لاراول ۱۳ با معرفی Database Driver امکان استفاده از MySQL یا PostgreSQL موجود را به عنوان Message Broker فراهم می‌کند .

// config/reverb.php
return [
    'default' => 'reverb',

    'apps' => [
        [
            'id' => env('REVERB_APP_ID'),
            'key' => env('REVERB_APP_KEY'),
            'secret' => env('REVERB_APP_SECRET'),
        ],
    ],

    'servers' => [
        'reverb' => [
            'driver' => 'database', // به جای 'redis'
            'connection' => env('REVERB_DB_CONNECTION', 'mysql'),
        ],
    ],
];

۸. Passkey Authentication در Starter Kits

Passkeyها (احراز هویت بدون رمز عبور مبتنی بر WebAuthn) اکنون در Starter Kitها و Laravel Fortify یکپارچه شده‌اند . کاربران می‌توانند با Face ID، Touch ID، یا کلیدهای سخت‌افزاری وارد شوند – بدون نیاز به رمز عبور.

// فعال‌سازی Passkey در Fortify
// config/fortify.php
'features' => [
    Features::registration(),
    Features::resetPasswords(),
    Features::emailVerification(),
    Features::updateProfileInformation(),
    Features::updatePasswords(),
    Features::passkeys(), // ← ویژگی جدید
],

// مدل User با trait مربوطه
use Laravel\Fortify\TwoFactorAuthenticatable;
use Laravel\Fortify\HasPasskeys;

class User extends Authenticatable
{
    use HasPasskeys;
    // ...
}

۹. بازگشت قابلیت Teams به Starter Kits

قابلیت چند مستأجری (Multi-tenancy) مبتنی بر تیم که قبلاً در Jetstream وجود داشت، اکنون با پیاده‌سازی بهبودیافته به Starter Kitهای رسمی بازگشته است .

بهبود نسبت به Jetstream قدیم: در پیاده‌سازی جدید می‌توانید دو تیم مختلف را همزمان در تب‌های مختلف مرورگر باز داشته باشید – قابلیتی که در Jetstream قدیمی امکان‌پذیر نبود .

۱۰. سایر بهبودها

MySQL DELETE…JOIN با ORDER BY/LIMIT: لاراول ۱۳ اکنون از سینتکس کامل DELETE…JOIN در MySQL پشتیبانی می‌کند. قبلاً ORDER BY و LIMIT بی‌صدا نادیده گرفته می‌شدند .

// حذف ۱۰ کامنت قدیمی‌ترین پست‌های یک کاربر خاص
DB::table('comments')
    ->join('posts', 'posts.id', '=', 'comments.post_id')
    ->where('posts.user_id', $userId)
    ->orderBy('comments.created_at')
    ->limit(10)
    ->delete();

رفع مشکل HTTP Pool Concurrency: قبلاً Http::pool() به دلیل default null بودن concurrency، درخواست‌ها را سریال اجرا می‌کرد. لاراول ۱۳ مقدار پیش‌فرض را به ۲ تغییر داده است .

use Illuminate\Support\Facades\Http;

$responses = Http::pool(fn ($pool) => [
    $pool->get('https://api.example.com/users'),
    $pool->get('https://api.example.com/posts'),
    $pool->get('https://api.example.com/comments'),
]);
// اکنون ۲ درخواست همزمان اجرا می‌شوند

پشتیبانی از Symfony 7.4 و 8.0

روش‌های ارتقا به لاراول ۱۳

روش ۱: Laravel Boost (ارتقای مبتنی بر هوش مصنوعی)

Laravel Boost یک MCP Server رسمی است که راهنمایی‌های گام‌به‌گام ارتقا را به دستیارهای برنامه‌نویسی هوش مصنوعی ارائه می‌دهد .

# نصب Laravel Boost در پروژه لاراول ۱۲
composer require laravel/boost --dev

# سپس در Claude Code، Cursor، OpenCode، یا VS Code
/upgrade-laravel-13

روش ۲: Laravel Shift (PR خودکار)

Laravel Shift یک Pull Request با کامیت‌های اتمی و ساختاریافته برای شما ایجاد می‌کند .

روش ۳: ارتقای دستی (Manual Upgrade)

برای ارتقای دستی، composer.json را به‌روزرسانی کنید :

{
    "require": {
        "php": "^8.3",
        "laravel/framework": "^13.0",
        "laravel/tinker": "^3.0"
    },
    "require-dev": {
        "phpunit/phpunit": "^12.0",
        "pestphp/pest": "^4.0"
    }
}

سپس اجرا کنید:

composer update

ابزار خودکارسازی Rector: پکیج muhammadsadeeq/laravel-upgrades-rector با ۲۰ قانون اختصاصی برای مسیر ارتقای Laravel 12 → 13 می‌تواند فرآیند ارتقا را خودکار کند .


جدول خلاصه پشتیبانی و الزامات نسخه‌ها

نسخه حداقل PHP تاریخ انتشار پایان باگ فیکس پایان امنیتی
۱۰ ۸.۱ - ۸.۳ ۱۴ فوریه ۲۰۲۳ ۶ آگوست ۲۰۲۴ ۴ فوریه ۲۰۲۵
۱۱ ۸.۲ - ۸.۴ ۱۲ مارس ۲۰۲۴ ۳ سپتامبر ۲۰۲۵ ۱۲ مارس ۲۰۲۶
۱۲ ۸.۲ - ۸.۵ ۲۴ فوریه ۲۰۲۵ ۱۳ آگوست ۲۰۲۶ ۲۴ فوریه ۲۰۲۷
۱۳ ۸.۳ - ۸.۵ ۱۷ مارس ۲۰۲۶ Q3 ۲۰۲۷ مارس ۲۰۲۸

منبع:


منابع تکمیلی و لینک‌های مفید

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

مستندات رسمی

اخبار و مقالات

ابزارهای ارتقا

ویدیوهای پیشنهادی