وبلاگ

Laravel

ساخت اپلیکیشن وب با Laravel: مسیریابی، مدل‌های Eloquent، احراز هویت، صف‌ها و استقرار، با مثال‌های عملی که در پروژه‌های واقعی به کار می‌آیند.

هنوز مطلبی در این بخش منتشر نشده است!

ما هنوز درباره این موضوع مطلبی ننوشته‌ایم. لطفاً موضوع دیگری را ببینید یا به‌زودی دوباره سر بزنید!

Questions about this topic

Quick, clear answers to what readers ask most about this topic.

Laravel چیست؟

Laravel یک فریم‌ورک PHP رایگان و متن‌باز برای ساخت اپلیکیشن‌های وب است. Laravel بخش‌های آماده‌ای برای مسیریابی، پایگاه داده، ورود کاربر، ایمیل، صف‌ها و تست به توسعه‌دهنده می‌دهد تا کد تکراری کمتری بنویسد. این فریم‌ورک از الگوی model، view، controller پیروی می‌کند و جامعه کاربری بزرگی دارد.

Laravel برای ساخت چه چیزهایی استفاده می‌شود؟

Laravel برای ساخت اپلیکیشن‌های وب مثل سیستم‌های مدیریت، پورتال مشتریان، فروشگاه اینترنتی، پلتفرم رزرو و API برای اپلیکیشن‌های موبایل استفاده می‌شود. Laravel برای هر پروژه‌ای که کاربر، پایگاه داده و قوانین کسب‌وکار دارد مناسب است. بسیاری از شرکت‌ها سیستم‌های خصوصی بزرگ را روی Laravel اجرا می‌کنند چون پایدار است و راحت گسترش می‌یابد.

آیا Laravel برای مبتدی‌ها مناسب است؟

Laravel برای مبتدی‌هایی که PHP پایه را بلدند مناسب است، چون کدش خواناست و مستندات رسمی‌اش روشن است. Laravel جامعه بزرگ، آموزش‌های فراوان و starter kitهایی دارد که صفحه‌های ورود را برایتان آماده می‌کنند. یادگیری PHP خالص در ابتدا، فهم این فریم‌ورک را خیلی آسان‌تر می‌کند.

چطور Laravel را روی کامپیوترم نصب کنم؟

برای نصب Laravel اول PHP و Composer را نصب کنید و بعد دستور composer create-project laravel/laravel را همراه نام پروژه اجرا کنید. نصب‌کننده Laravel با دستور laravel new همین کار را می‌کند و starter kit هم پیشنهاد می‌دهد. بعد از آن php artisan serve یک سرور محلی راه می‌اندازد تا اپلیکیشن را در مرورگر باز کنید.

Laravel به کدام نسخه PHP نیاز دارد؟

Laravel به یک نسخه جدید PHP 8 نیاز دارد و هر نسخه Laravel پایین‌ترین نسخه PHP پشتیبانی‌شده را اعلام می‌کند. نسخه‌های جدیدتر Laravel با پایان پشتیبانی امنیتی نسخه‌های قدیمی PHP، پشتیبانی از آن‌ها را کنار می‌گذارند. همیشه راهنمای ارتقای نسخه Laravel مورد نظرتان را بررسی کنید.

مسیریابی (routing) در Laravel چیست؟

مسیریابی در Laravel یک آدرس وب و یک متد HTTP، مثل GET یا POST، را به کدی که پاسخ می‌دهد وصل می‌کند. مسیرها در فایل‌هایی مثل routes/web.php برای صفحه‌ها و routes/api.php برای APIها نوشته می‌شوند. هر مسیر می‌تواند یک closure یا متد controller را صدا بزند و middleware برای ورود و بررسی‌های دیگر داشته باشد.

Eloquent در Laravel چیست؟

Eloquent همان ORM در Laravel است، بخشی که اجازه می‌دهد با جدول‌های پایگاه داده به شکل کلاس‌های PHP به نام model کار کنید. هر model به یک جدول و هر شیء به یک ردیف نگاشت می‌شود، پس بدون نوشتن SQL داده را می‌خوانید و ذخیره می‌کنید. Eloquent رابطه‌هایی مثل یک به چند و چند به چند را هم مدیریت می‌کند.

رابطه‌های Eloquent در Laravel چطور کار می‌کنند؟

رابطه‌های Eloquent در Laravel متدهایی روی model هستند، مثل hasMany، belongsTo و belongsToMany، که نحوه اتصال دو جدول را توصیف می‌کنند. پس از تعریف، داده مرتبط را مثل $order->customer بدون نوشتن join می‌خوانید. eager loading با متد with ردیف‌های مرتبط را یک‌جا بارگذاری می‌کند و از کوئری‌های تکراری کند جلوگیری می‌کند.

مشکل کوئری N+1 در Laravel چیست؟

مشکل N+1 در Laravel وقتی پیش می‌آید که کد فهرستی از رکوردها را بارگذاری می‌کند و بعد برای گرفتن داده مرتبط، برای هر رکورد یک کوئری اضافه اجرا می‌کند. صفحه‌ای با 100 سفارش ممکن است 101 کوئری اجرا کند و کند شود. eager loading با متد with ردیف‌های مرتبط را در یک کوئری می‌گیرد و مشکل را حل می‌کند.

migration در Laravel چیست؟

migrationها در Laravel فایل‌های PHP هستند که جدول‌های پایگاه داده را در کد می‌سازند و تغییر می‌دهند. اجرای php artisan migrate آن‌ها را اعمال می‌کند تا همه توسعه‌دهندگان و همه سرورها ساختار پایگاه داده یکسانی داشته باشند. چون migrationها در کنترل نسخه هستند، سابقه هر تغییر جدول حفظ می‌شود.

Blade در Laravel چیست؟

Blade موتور قالب Laravel برای نوشتن صفحه‌های HTML با تگ‌های ساده برای حلقه، شرط و layout است. Blade به طور پیش‌فرض مقدارهای چاپ‌شده را escape می‌کند که از صفحه در برابر cross-site scripting محافظت می‌کند. قالب‌ها به PHP خالص کامپایل و کش می‌شوند، پس Blade تقریباً هیچ هزینه‌ای به هر درخواست اضافه نمی‌کند.

احراز هویت در Laravel چطور کار می‌کند؟

احراز هویت در Laravel با guardها که هویت کاربر را بررسی می‌کنند و providerها که کاربران را از پایگاه داده بارگذاری می‌کنند کار می‌کند. starter kitهایی مثل Laravel Breeze صفحه‌های آماده ورود، ثبت‌نام و بازیابی رمز عبور اضافه می‌کنند. رمزهای عبور با bcrypt یا Argon2 هش می‌شوند و هرگز به صورت متن ساده ذخیره نمی‌شوند.

تفاوت Laravel Sanctum و Laravel Passport چیست؟

Laravel Sanctum ورود ساده با توکن و کوکی را برای اپلیکیشن‌های تک‌صفحه‌ای، اپلیکیشن‌های موبایل و APIهای پایه فراهم می‌کند، در حالی که Laravel Passport یک سرور کامل OAuth2 است. بیشتر پروژه‌ها فقط به Sanctum نیاز دارند چون سبک‌تر است و راحت‌تر راه می‌افتد. Passport برای مواردی مناسب است که اپلیکیشن‌های بیرونی باید از طرف کاربران شما وارد شوند.

middleware در Laravel چیست؟

middlewareها در Laravel لایه‌هایی هستند که درخواست را پیش از رسیدن به کد شما یا پاسخ را پیش از خروج بررسی یا تغییر می‌دهند. middlewareهای رایج بررسی ورود، محافظت CSRF، محدودیت تعداد درخواست و تنظیم زبان را انجام می‌دهند. می‌توانید middleware را به یک مسیر، گروهی از مسیرها یا کل اپلیکیشن وصل کنید.

صف‌ها (queues) در Laravel چطور کار می‌کنند؟

صف‌ها در Laravel کارهای کند، مثل ارسال ایمیل یا ساخت گزارش، را از درخواست وب بیرون می‌برند و به jobهای پس‌زمینه تبدیل می‌کنند. هر job به یک درایور صف مثل Redis یا پایگاه داده فرستاده می‌شود و workerی که با php artisan queue:work اجرا شده آن را انجام می‌دهد. کاربر پاسخ سریع می‌گیرد و کار سنگین در پس‌زمینه تمام می‌شود.

کی در اپلیکیشن Laravel از صف استفاده کنم؟

هر وقت کاری بیش از یک لحظه طول بکشد یا با سرویسی بیرونی ارتباط داشته باشد، مثل ایمیل، پردازش فایل یا webhookهای پرداخت، از صف استفاده کنید. صف‌ها صفحه‌ها را سریع نگه می‌دارند و به jobهای ناموفق اجازه می‌دهند خودشان دوباره تلاش کنند. Laravel Horizon داشبوردی برای دیدن صف‌های Redis می‌دهد.

چطور در Laravel کارها را زمان‌بندی کنم؟

کارها را در scheduler لاراول با متدهایی مثل daily یا everyFiveMinutes تعریف کنید و بعد php artisan schedule:run را با یک ورودی cron روی سرور هر دقیقه اجرا کنید. scheduler خودش تصمیم می‌گیرد کدام کارها موعدشان رسیده است. این روش همه کارهای زمان‌دار را به جای خطوط cron جداگانه زیاد، داخل کد نگه می‌دارد.

چطور داده فرم را در Laravel اعتبارسنجی کنم؟

داده فرم را در Laravel با متد validate روی request یا با یک کلاس Form Request که قوانین را نگه می‌دارد اعتبارسنجی کنید. قوانینی مثل required، email، max و unique هر فیلد را پیش از استفاده کد شما بررسی می‌کنند. وقتی اعتبارسنجی شکست بخورد، Laravel کاربر را همراه پیام‌های خطا و ورودی قبلی برمی‌گرداند.

Laravel چطور از اپلیکیشن در برابر حمله‌های رایج وب محافظت می‌کند؟

Laravel با توکن CSRF روی فرم‌ها، خروجی escape‌شده در Blade، parameter binding در کوئری‌های پایگاه داده و رمزهای عبور هش‌شده از اپلیکیشن محافظت می‌کند. این پیش‌فرض‌ها در استفاده عادی جلوی جعل درخواست بین‌سایتی، cross-site scripting و SQL injection را می‌گیرند. توسعه‌دهندگان همچنان باید ورودی را اعتبارسنجی کنند، دسترسی‌ها را بررسی کنند و فریم‌ورک را به‌روز نگه دارند.

چطور اپلیکیشن Laravel را روی سرور منتشر کنم؟

برای انتشار اپلیکیشن Laravel کد را روی سرور pull کنید، composer install را بدون پکیج‌های توسعه اجرا کنید، فایل .env را تنظیم کنید و migrationها را اجرا کنید. بعد config، مسیرها و viewها را کش کنید و وب‌سرور را به پوشه public هدایت کنید. بسیاری از تیم‌ها این مراحل را از Git خودکار می‌کنند تا هر انتشار یکسان باشد.

اپلیکیشن Laravel به چه سروری نیاز دارد؟

اپلیکیشن Laravel به سروری با PHP، یک وب‌سرور مثل Nginx یا Apache، یک پایگاه داده مثل MySQL یا PostgreSQL و Composer نیاز دارد. Redis اغلب برای کش و صف اضافه می‌شود و یک process manager workerهای صف را فعال نگه می‌دارد. Hostrena، برند هاستینگ Linkysoft، هاست اپلیکیشن وب برای Laravel با انتشار مستقیم از Git ارائه می‌کند.

چطور اپلیکیشن Laravel را سریع‌تر کنم؟

اپلیکیشن Laravel را با کش کردن config، مسیرها و viewها، eager loading رابطه‌ها و افزودن ایندکس به ستون‌هایی که جستجو می‌کنید سریع‌تر کنید. انتقال کارهای کند به صف و کش کردن نتیجه کوئری‌های سنگین در Redis هم کمک بیشتری می‌کند. فعال کردن PHP OPcache روی سرور با تلاش کم بهبود بزرگی می‌دهد.

چطور اپلیکیشن Laravel را تست کنم؟

اپلیکیشن Laravel را با PHPUnit یا Pest تست کنید که در هر پروژه جدید از قبل آماده‌اند. feature testها درخواست‌های ساختگی به مسیرها می‌فرستند و پاسخ و پایگاه داده را بررسی می‌کنند و unit testها تک‌تک کلاس‌ها را بررسی می‌کنند. اجرای php artisan test کل مجموعه تست را اجرا می‌کند.

آیا Laravel از پس اپلیکیشن‌های بزرگ با کاربران زیاد برمی‌آید؟

بله، Laravel وقتی روی سرورهای خوب با کش، صف، ایندکس پایگاه داده و بیش از یک سرور اپلیکیشن پشت load balancer اجرا شود، از پس اپلیکیشن‌های بزرگ با کاربران زیاد برمی‌آید. خود فریم‌ورک به ندرت محدودیت است و معمولاً کوئری‌های کند و نبود کش مشکل‌سازند. Linkysoft به همین دلیل اپلیکیشن‌های وب سفارشی را با PHP، Laravel، MySQL و Redis می‌سازد.

هر چند وقت یک بار باید نسخه Laravel را ارتقا دهم؟

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