Laravel Jetstream چیست و چرا بهترین انتخاب برای شروع پروژه‌های لاراولی است؟ — راهنمای جامع

وقتی یک پروژه جدید لاراولی رو شروع می‌کنی، اولین چیزی که نیاز داری سیستم ثبت‌نام، ورود، بازیابی رمز عبور و مدیریت پروفایل است. قبلاً باید همه این‌ها رو دستی پیاده‌سازی می‌کردی یا از پکیج‌هایی مثل Laravel UI استفاده می‌کردی. اما حالا لاراول یک استارترکیت مدرن و کامل داره به اسم Jetstream. Jetstream خیلی فراتر از لاگین و رجیستریشن ساده‌ست. این پکیج امکاناتی مثل احراز هویت دو مرحله‌ای (2FA)، مدیریت تیم‌ها و API Token رو به صورت آماده در اختیارت می‌ذاره.

Laravel Jetstream چیست؟

Jetstream یک استارترکیت رسمی لاراول است که برای ساخت اپلیکیشن‌های مدرن تحت وب طراحی شده. این پکیج با دو تکنولوژی Livewire و Inertia.js ارائه می‌شه. یعنی هم برای کسایی که Vue/React دوست دارن مناسبه، هم برای کسایی که می‌خوان سمت سرور (PHP + Blade) بمونن.

ویژگی‌های اصلی Jetstream

  • Authentication کامل: لاگین، رجیستریشن، reset password.
  • پروفایل کاربر: تغییر اطلاعات، آپلود عکس پروفایل.
  • Two-Factor Authentication (2FA): امنیت بیشتر با Google Authenticator یا SMS.
  • Session Management: کاربر می‌تونه همه sessionهای فعال رو مدیریت کنه.
  • API Tokens: مدیریت tokenها با Laravel Sanctum.
  • Teams: ساخت تیم، دعوت کاربر جدید، نقش‌های مختلف.

نصب Jetstream

نصب خیلی ساده‌ست:

composer require laravel/jetstream

سپس:

php artisan jetstream:install livewire

یا اگر Vue/React دوست داری:

php artisan jetstream:install inertia --vue

بعدش کافی‌ست npm رو اجرا کنی:

npm install && npm run dev

در نهایت:

php artisan migrate

مثال واقعی: سیستم آموزشی آنلاین

فرض کن یک پلتفرم آموزش آنلاین داری. با Jetstream می‌تونی:

  • ثبت‌نام دانشجوها رو مدیریت کنی.
  • پروفایل کامل براشون داشته باشی (نام، عکس، اطلاعات تماس).
  • تیم درست کنی برای کلاس‌ها (هر کلاس یک تیم).
  • با API Token به اپلیکیشن موبایل وصل بشی.

مثال واقعی: SaaS شرکتی

در SaaSهای شرکتی معمولاً چند تیم دارن (مثلاً HR، Marketing، Sales). با قابلیت Teams در Jetstream می‌تونی هر شرکت رو یک تیم در نظر بگیری و کاربراش رو مدیریت کنی.

کد نمونه: Migration جدول تیم‌ها


Schema::create('teams', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->foreignId('user_id')->constrained()->cascadeOnDelete();
    $table->boolean('personal_team')->default(false);
    $table->timestamps();
});
  

این migration مربوط به جدول teams است که Jetstream برای مدیریت تیم‌ها استفاده می‌کنه. هم می‌تونی تیم‌های شخصی داشته باشی (personal_team) و هم تیم‌های عمومی برای یک پروژه یا سازمان.

کد نمونه: ساخت تیم در Controller


class TeamController extends Controller
{
    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required|string|max:255',
        ]);

        $team = $request->user()->ownedTeams()->create([
            'name' => $request->name,
            'personal_team' => false,
        ]);

        return redirect()->route('teams.show', $team);
    }
}
  

این کنترلر نشان می‌دهد که چطور یک کاربر می‌تواند تیم جدید بسازد. در پروژه‌های واقعی، می‌توانی نقش‌ها و دسترسی‌های متفاوتی برای اعضای تیم تعریف کنی.

شخصی‌سازی Jetstream

  • اضافه کردن فیلد به پروفایل: می‌تونی migration بسازی و فیلد مثل phone یا address رو اضافه کنی.
  • تغییر UI: همه viewها در مسیر resources/views قابل تغییرن.
  • ترکیب با Role/Permission: می‌تونی Jetstream رو با پکیج spatie/laravel-permission ترکیب کنی تا نقش‌ها و دسترسی‌ها پیشرفته‌تر باشن.

سطح تخصصی‌تر: Jetstream + SPA

اگر پروژه‌ت یک SPA (با Vue یا React) هست، Jetstream با Inertia.js گزینه عالیه. اینطوری بدون نیاز به API جدا، می‌تونی یک اپ Vue/React بسازی که به صورت مستقیم با بک‌اند لاراول در ارتباط باشه.

Pitfalls و محدودیت‌ها

  • Jetstream برای پروژه‌های سریع و مدرن عالیه، ولی برای پروژه‌های خیلی ساده ممکنه سنگین باشه.
  • یادگیری Inertia یا Livewire ممکنه برای تازه‌کارها یک چالش باشه.
  • اگر UI اختصاصی می‌خوای، باید customization زیادی انجام بدی.

جمع‌بندی

Laravel Jetstream یک استارترکیت قدرتمنده که می‌تونه بخش بزرگی از نیازهای هر پروژه وب رو پوشش بده. با امکاناتی مثل 2FA، تیم‌ها، API Token و پروفایل، عملاً نیمی از کارای authentication آماده می‌شن. اگر پروژه‌ت متوسط یا بزرگه و می‌خوای سریع راه‌اندازی بشه، Jetstream انتخاب فوق‌العاده‌ایه. ولی اگه پروژه خیلی کوچیک داری، شاید استفاده از Breeze یا Laravel UI سبک‌تر باشه.