کانال آموزشی لاراول
3.06K subscribers
120 photos
4 videos
38 links
📌 کانال اتاق برنامه نویسی
@PapiDon_coding
Download Telegram
2
کانال آموزشی لاراول
Photo
تغییرات مسیریابی در لاراول 11 و مدیریت پیشوند api/

سلام دوستان 👋

امروز می‌خواهیم در مورد یکی از تغییرات مهم در لاراول 11 صحبت کنیم؛ یعنی نحوه مدیریت مسیریابی و پیشوند api/. این موضوع مخصوصاً برای کسانی که با نسخه‌های قبلی لاراول کار کرده‌اند، بسیار مهم است چون تغییرات عمده‌ای در ساختار مسیریابی لاراول 11 ایجاد شده است.


🛠 حذف RouteServiceProvider.php

در نسخه‌های قبلی لاراول، فایل RouteServiceProvider.php برای مدیریت مسیریابی و تنظیم پیشوندهایی مانند api/ استفاده می‌شد. اما در لاراول 11، این فایل حذف شده و مسئولیت تنظیمات مسیریابی به فایل bootstrap/app.php منتقل شده است.


🧐 پیشوند api/ از کجا می‌آید؟

به صورت پیش‌فرض، وقتی شما از فایل routes/api.php برای تعریف مسیرهای API استفاده می‌کنید، لاراول به طور خودکار پیشوند api/ را به این مسیرها اضافه می‌کند. این پیشوند از طریق تنظیمات در فایل bootstrap/app.php اعمال می‌شود.

🔍 مثال:

فرض کنید در فایل routes/api.php یک مسیر به نام test تعریف کرده‌اید:

Route::get('test', function() {
return "Hi";
});


در این صورت، برای دسترسی به این مسیر باید از http://127.0.0.1:8000/api/test استفاده کنید.


✏️ تغییر یا حذف پیشوند api/

اگر می‌خواهید پیشوند api/ را تغییر دهید یا حذف کنید، باید به سراغ فایل bootstrap/app.php بروید و تنظیمات را به دلخواه خود تغییر دهید.

🔧 تنظیمات در bootstrap/app.php

return Application::configure(basePath: dirname(__DIR__))
->withRouting(
web: __DIR__.'/../routes/web.php',
api: __DIR__.'/../routes/api.php',
commands: __DIR__.'/../routes/console.php',
health: '/up',
apiPrefix: '', // با تنظیم این مقدار به خالی، پیشوند /api حذف می‌شود
)
->create();


با تنظیم apiPrefix به مقدار خالی ('')، دیگر مسیرهای API شما بدون پیشوند api/ خواهند بود. به این معنی که برای دسترسی به مسیر test فقط کافیست از http://127.0.0.1:8000/test استفاده کنید.

چرا http://127.0.0.1:8000/test خطای 404 می‌دهد؟

اگر این مسیر بدون پیشوند api/ خطای 404 می‌دهد، به این دلیل است که پیشوند api/ به صورت پیش‌فرض به مسیرهای API شما اضافه شده است. برای رفع این مشکل، باید یا پیشوند را حذف کنید یا مسیر را به همراه پیشوند درست وارد کنید.


کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
👍152🔥1
🔥4
کانال آموزشی لاراول
Photo
🎓 Laravel Sail

امروز می‌خواهیم درباره یکی از ابزارهای مفید و کاربردی لاراول به نام Laravel Sail صحبت کنیم. این ابزار مخصوصاً برای توسعه‌دهندگانی طراحی شده که می‌خواهند محیط توسعه لاراول خود را با استفاده از Docker به سرعت و بدون پیچیدگی راه‌اندازی کنند. بیایید ببینیم Sail دقیقاً چه کار می‌کند و چرا ممکن است برای پروژه‌های شما مفید باشد.

🧐 اصلا Laravel Sail چیست؟

یک رابط خط فرمان سبک برای تعامل با محیط توسعه پیش‌فرض لاراول در Docker است. Sail به شما اجازه می‌دهد تا بدون نیاز به داشتن دانش عمیق از Docker، به راحتی یک محیط توسعه کامل برای پروژه‌های لاراول خود راه‌اندازی کنید. این محیط شامل سرویس‌هایی مثل PHP، MySQL، Redis و بسیاری دیگر است که برای توسعه‌ی برنامه‌های لاراولی مورد نیاز هستند.

🔧 چطور کار می‌کند؟

در واقع Sail از طریق یک فایل docker-compose.yml در ریشه پروژه شما کار می‌کند. این فایل، سرویس‌های مختلف مورد نیاز برای اجرای پروژه را تعریف می‌کند. سپس با استفاده از دستوراتی که از طریق CLI Sail فراهم می‌شوند، می‌توانید این سرویس‌ها را به راحتی مدیریت کنید.

🎯 کاربرد Laravel Sail

- راه‌اندازی سریع محیط توسعه: Sail به شما این امکان را می‌دهد که با چند دستور ساده، یک محیط توسعه کامل راه‌اندازی کنید.

- استفاده در سیستم‌های مختلف: Sail روی macOS، Linux و Windows (با WSL2) پشتیبانی می‌شود، بنابراین بدون نگرانی از سیستم‌عامل خود می‌توانید از آن استفاده کنید.

- اجرای دستورات در محیط ایزوله: شما می‌توانید دستورات مختلف PHP، Composer، Artisan و حتی Node.js را در داخل کانتینر Docker اجرا کنید، که به معنای ایزوله بودن محیط توسعه از سیستم اصلی شماست.

- مدیریت پایگاه داده‌ها: Sail به شما اجازه می‌دهد به سادگی با پایگاه داده‌هایی مثل MySQL و Redis در Docker تعامل داشته باشید، بدون اینکه نیاز به نصب مستقیم آنها روی سیستم‌تان داشته باشید.

🔍 چه زمانی از Sail استفاده کنیم؟

اگر می‌خواهید به سرعت و بدون درگیری با تنظیمات پیچیده Docker، یک محیط توسعه کامل برای پروژه لاراولی خود ایجاد کنید، Laravel Sail انتخاب بسیار خوبی است. این ابزار به خصوص برای تیم‌هایی که می‌خواهند یک محیط توسعه یکپارچه و مشترک داشته باشند، مفید است.

امیدوارم این درسگفتار به شما کمک کرده باشد تا بهتر درک کنید Laravel Sail چیست و چه کاربردهایی دارد! 🙂🫶



کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
👍102
👏3
کانال آموزشی لاراول
Photo
🎓 وظیفه و کاربرد ()this->fill$ در Livewire

امروز می‌خواهیم درباره یکی از متدهای مفید در Livewire به نام ()this->fill$ صحبت کنیم. این متد یکی از ابزارهای کاربردی برای پر کردن (یا مقداردهی) چندین خصوصیت (property) در کامپوننت‌های Livewire به طور همزمان است.

🔍 بررسی ()this->fill$

متد $()this->fill$ به شما این امکان را می‌دهد که یک آرایه از داده‌ها را به چندین خصوصیت کامپوننت Livewire به طور همزمان اختصاص دهید. این متد به ویژه زمانی مفید است که شما بخواهید چندین خصوصیت را به یکباره مقداردهی کنید، بدون اینکه نیاز به تعیین مقدار هر خصوصیت به صورت جداگانه داشته باشید.

🔧 مثال:

فرض کنید شما یک فرم دارید که شامل فیلدهای name، email و address است و می‌خواهید این فیلدها را از یک منبع داده (مثلاً یک درخواست HTTP) به‌روز کنید. به جای اینکه هر خصوصیت را به صورت جداگانه مقداردهی کنید، می‌توانید از ()this->fill$ استفاده کنید:


$this->fill([
'name' => $data['name'],
'email' => $data['email'],
'address' => $data['address'],
]);



این متد به راحتی همه این خصوصیات را به یکباره مقداردهی می‌کند.

🎯 آیا فقط در متد ()mount استفاده می‌شود؟

خیر، ()this->fill$ محدود به استفاده در متد ()mount نیست. شما می‌توانید از این متد در هر کجای کامپوننت Livewire استفاده کنید، مانند:

- در متدهای دیگر کامپوننت: برای به‌روزرسانی خصوصیات هنگام اجرای یک اکشن خاص.

- در متد update: برای بروزرسانی داده‌ها هنگام تعاملات کاربر.

- در متدهای لایو‌وایر دیگر: در هر جایی که نیاز به مقداردهی خصوصیات داشته باشید.

🎯 نتیجه‌گیری

متد ()this->fill$ یک ابزار قدرتمند و انعطاف‌پذیر برای مقداردهی چندین خصوصیت در Livewire به طور همزمان است و می‌تواند در هر کجای کامپوننت مورد استفاده قرار گیرد. این متد به خصوص در مواردی که نیاز به مقداردهی سریع و همزمان چندین خصوصیت دارید، بسیار مفید است.


کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
👍7🔥2
2
کانال آموزشی لاراول
Photo
استفاده از متد parent$ در لایووایر ۳

🤔 اکشن‌ها در لایووایر چیست؟

در لایووایر (Livewire)، اکشن‌ها به شما اجازه می‌دهند تا از طریق رویدادها (events) و دستورات (actions)، ارتباط موثری بین کامپوننت‌های مختلف برقرار کنید. یکی از امکانات جدید و مفید در این زمینه استفاده از ویژگی parent$ است که در نسخه ۳ لایووایر معرفی شده است.

متد parent$ به شما این امکان را می‌دهد که از داخل یک کامپوننت فرزند، به متدها و خواص (properties) کامپوننت والد دسترسی پیدا کنید. این قابلیت زمانی مفید است که بخواهید از داخل فرزند، عملیاتی در والد اجرا کنید یا داده‌ای را به آن بفرستید بدون اینکه رویدادی ارسال کنید.


⚙️ متد parent$ چطور کار می‌کند؟

زمانی که یک کامپوننت فرزند می‌خواهد مستقیماً به یک متد یا ویژگی در والد دسترسی پیدا کند، به جای استفاده از رویدادها (dispatching events)، می‌توانید از parent$ استفاده کنید. در واقع parent$ مستقیماً از درون الگوهای Blade استفاده می‌شود.

مثال:

فرض کنید کامپوننت والد متدی به نام ()removePost دارد. شما می‌توانید از داخل کامپوننت فرزند این متد را فراخوانی کنید:


<button wire:click="$parent.removePost({{ $post->id }})">Remove</button>



در این مثال، کامپوننت فرزند از طریق parent$ متد ()removePost را در کامپوننت والد فراخوانی می‌کند و id پست را به آن ارسال می‌کند. این کار ساده و مستقیم است و به شما اجازه می‌دهد ارتباط مؤثری بین فرزند و والد برقرار کنید بدون نیاز به سیستم پیچیده رویدادها.


🕰 کی از parent$ استفاده کنیم؟

- ارتباط مستقیم بین فرزند و والد: وقتی که نیاز دارید به‌راحتی از فرزند به متدها و خواص والد دسترسی پیدا کنید.

- پیچیدگی کم: در سیستم‌های ساده که استفاده از رویدادها باعث پیچیدگی بی‌مورد می‌شود.

- تعداد کم کامپوننت‌ها: زمانی که تعداد کمی کامپوننت دارید و ارتباط بین آن‌ها مستقیم است.

⛔️ زمانی که نباید از parent$ استفاده کنید:

- سیستم‌های پیچیده: وقتی تعداد زیادی کامپوننت دارید و استفاده بیش از حد از parent$ باعث وابستگی شدید بین کامپوننت‌ها می‌شود.

- ارتباطات غیرمستقیم: وقتی نیاز است داده‌ها بین کامپوننت‌های متعدد و پیچیده جابه‌جا شوند، بهتر است از رویدادها (dispatching events) استفاده کنید.

🎯 رویدادها (Dispatching Events) چیست؟

در لایووایر، رویدادها به شما این امکان را می‌دهند که بدون وابستگی مستقیم، اطلاعات بین کامپوننت‌ها را جابه‌جا کنید. در این روش، یک کامپوننت می‌تواند رویدادی ارسال کند و کامپوننت‌های دیگر به آن گوش دهند.

مزایای استفاده از رویدادها:

1️⃣ استقلال کامپوننت‌ها: هر کامپوننت می‌تواند به طور مستقل عمل کند.

2️⃣ قابلیت توسعه بالا: برای پروژه‌های بزرگ‌تر مناسب‌تر است.

3️⃣ ارتباطات چندطرفه: رویدادها می‌توانند به صورت چندگانه مدیریت شوند، یعنی یک رویداد می‌تواند توسط چندین کامپوننت شنیده شود.

مثال از رویدادها:

$this->dispatch('eventName', ['data' => $someData]);


و در والد:

use Livewire\Attributes\On;

#[On('eventName')]
public function handleEvent($data)
{
// کاری که باید انجام شود
}


⚖️ تفاوت parent$ و رویدادها (Dispatching Events)

parent$

- ارتباط مستقیم بین فرزند و والد.
- سریع و ساده برای سیستم‌های کوچک.
- وابستگی زیاد بین کامپوننت‌ها.
- مناسب برای سیستم‌های ساده و ارتباطات کم‌پیچیدگی.

Dispatching Events

- ارتباط غیرمستقیم بین کامپوننت‌ها.
- کاهش وابستگی بین آن‌ها.
- مناسب برای سیستم‌های پیچیده و بزرگ.
- مدیریت بهتر در پروژه‌های چندلایه و پیچیده.


⚜️در نهایت، انتخاب بین استفاده از parent$ و رویدادها (Dispatching Events) بستگی به نیاز پروژه دارد. برای ارتباطات ساده و مستقیم، parent$ مناسب‌تر است؛ اما برای پروژه‌های پیچیده و بزرگ، رویدادها استقلال بیشتری بین کامپوننت‌ها فراهم می‌کنند و مدیریت بهتر را ممکن می‌سازند.



کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
👍5💯21🔥1
"فکر می‌کنی زمانی شروع می‌کنی که همه چیز کامل باشد، اما باور کن که چنین اتفاقی هیچ‌وقت نخواهد افتاد. و حتی اگر هم بیافتد، آن زمان دیگر خیلی دیر شده است."


کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
💯7👌21👍1🔥1
کانال آموزشی لاراول
Photo
🔔نکات کلیدی درباره Livewire و امنیت داده‌ها

1️⃣ دیتای Public و امنیت آن

در Livewire، تمام ویژگی‌های public موجود در کنترلر کامپوننت به یک آبجکت جاوااسکریپت تبدیل شده و به سمت کلاینت ارسال می‌شوند. یعنی هر کسی می‌تونه این داده‌ها رو از طریق DevTools یا ابزارهای مشابه مشاهده کنه.

راهکار:
- از گذاشتن اطلاعات حساس به صورت public خودداری کنید.
- اگر نیاز دارید که داده‌ای رو به کلاینت ارسال کنید، مطمئن باشید که حاوی اطلاعات حساس نیست.
- برای داده‌های حساس از private یا protected استفاده کنید و از متدهای ایمن برای دسترسی به آن‌ها بهره ببرید.

2️⃣ متدهای Public و قابلیت فراخوانی از سمت کلاینت

متدهای public در Livewire به‌طور پیش‌فرض قابل فراخوانی از سمت کلاینت هستند. این متدها می‌توانند مستقیماً در Template با دستورات مثل wire:click، wire:submit و غیره استفاده شوند. این یعنی کاربران می‌توانند این متدها رو از طریق DevTools یا جاوااسکریپت صدا بزنند.

راهکار:
- متدهای حساس رو public نکنید یا مطمئن شوید که فقط عملیات امن و ضروری در این متدها انجام می‌شود.
- از middleware و authorization مناسب برای متدهای public استفاده کنید تا دسترسی‌های غیرمجاز محدود شوند.

3️⃣ خصوصیات محاسبه‌شده (Computed Properties)

متدهایی که با [Computed]# تعریف می‌شوند، حتی اگر public باشند، از سمت کلاینت به عنوان اکشن قابل فراخوانی نیستند. این متدها به عنوان خصوصیات محاسبه‌شده عمل می‌کنند و امنیت بهتری را فراهم می‌کنند.

مزیت:
- جلوگیری از دسترسی غیرمجاز به منطق داخلی کامپوننت.
- کاربران نمی‌توانند این متدها را مستقیماً از طریق DevTools یا هر روش دیگری فراخوانی کنند، که این موضوع امنیت را افزایش می‌دهد.

4️⃣ خصوصیات قفل‌شده (Locked Properties)

با استفاده از [Locked]# می‌توانید متغیرهای حساس را قفل کنید تا کاربران نتونن اون‌ها را از سمت کلاینت تغییر بدن. این ویژگی برای محافظت از داده‌های کلیدی مثل شناسه‌ها (IDs) بسیار مفید است.

مزیت:
- جلوگیری از تغییرات غیرمجاز و افزایش امنیت داده‌ها.
- محافظت از داده‌های حساس مانند شناسه‌ها که نباید توسط کاربران تغییر پیدا کنند.

🛠قانون کلی:
- هر متغیری که شامل داده‌های کلیدی یا حساس است، باید با [Locked]# مشخص شود تا از تغییر غیرمجاز جلوگیری شود.

5️⃣ هیدراسیون (Hydration) برای اطمینان از همگام‌سازی داده‌ها

فرآیندی است Hydration که تضمین می‌کند داده‌ها در زمان اجرای مجدد کامپوننت همواره به‌روز هستند و از دیتابیس تازه‌سازی می‌شوند. این فرآیند شامل چند مرحله است:

1. Hydration
- هنگام بارگذاری اولیه کامپوننت، وضعیت آن در سمت سرور ایجاد و سپس به صورت HTML به مرورگر ارسال می‌شود.

2. Dehydration
- قبل از ارسال به مرورگر، وضعیت کامپوننت به یک فرم سریال‌شده تبدیل می‌شود تا حجم داده‌ها کاهش یابد.

3. Rehydration
- هنگام وقوع یک تعامل (مثل کلیک یا تایپ) در سمت کاربر، وضعیت سریال‌شده به سرور ارسال می‌شود.
- در سرور، وضعیت مجدداً به یک شیء کامپوننت تبدیل شده و تغییرات اعمال می‌شود.
- سپس پاسخ به مرورگر برمی‌گردد و وضعیت کامپوننت به‌روز می‌شود.

مزیت:
- تجربه کاربری روان و داده‌های دقیق و به‌روز.
- امکان مدیریت تعاملات پویا و به‌روزرسانی‌های بلادرنگ بدون نیاز به بارگذاری مجدد صفحه.

راهکار:
- از متد ()hydrate برای همگام‌سازی مجدد داده‌ها استفاده کنید تا از بروز تناقضات داده‌ای جلوگیری شود.



کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
👍93🔥1
کانال آموزشی لاراول pinned «🔔نکات کلیدی درباره Livewire و امنیت داده‌ها 1️⃣ دیتای Public و امنیت آن در Livewire، تمام ویژگی‌های public موجود در کنترلر کامپوننت به یک آبجکت جاوااسکریپت تبدیل شده و به سمت کلاینت ارسال می‌شوند. یعنی هر کسی می‌تونه این داده‌ها رو از طریق DevTools یا…»
گاهی حس می‌کنم ریفکتور کردن کدها شده بخشی از DNA من! یهو می‌زنم زیر codebase و شروع می‌کنم به بهینه‌سازی یا سبک‌تر کردن کدها. تو هم این حس رو داری که کد رو هی دست‌کاری کنی، یا وقتی کار می‌کنه، می‌گی دیگه چه کاریه؟
Anonymous Poll
60%
اصلا تا دلت بخواد، دیوانه وار
40%
نه بابا ! کار می‌کنه دیگه انگول چی آخه
👍1🔥1
کانال آموزشی لاراول pinned «گاهی حس می‌کنم ریفکتور کردن کدها شده بخشی از DNA من! یهو می‌زنم زیر codebase و شروع می‌کنم به بهینه‌سازی یا سبک‌تر کردن کدها. تو هم این حس رو داری که کد رو هی دست‌کاری کنی، یا وقتی کار می‌کنه، می‌گی دیگه چه کاریه؟»
"In der Ruhe liegt die Kraft."

آلمانی ها میگن : قدرت در آرامش نهفته است.

با یه برداشت آزاد ازین ضرب المثل داشتم به این فکر میکردم که تفاوت بین یه سینیور و جونیور دقیقا همینجاست، فارغ از تجربه کاری.

ازین آرامشی میاد که تسلط به خودش داره.
یعنی شاید لزوما هم در اون مورد خاص هم جوابی نداشته باشه ها در لحظه !

ولی اون دل ناآرام جونیور عاملی میشه برای دست و پا زدن های بی دلیل خودش که در نهایت فروتر می‌ره !


کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
👏11👍71🔥1
کانال آموزشی لاراول
Photo
انقلابی در استقرار برنامه‌های لاراول Laravel Cloud در لاراول ۱۲

یک سرویس ابری جدید است که همراه با نسخه ۱۲ لاراول معرفی شده است. هدف آن ساده‌سازی استقرار (Deployment) و مدیریت برنامه‌های لاراول در فضای ابری است، بدون نیاز به تنظیمات پیچیده یا دانش DevOps

در این درس‌گفتار، با مفهوم Laravel Cloud، نحوه‌ی عملکرد آن، مزایای کلیدی و میزان نیاز به دانش DevOps آشنا خواهیم شد.

🔸بخش اول: Laravel Cloud چیست و چه کاربردی دارد؟

یک پلتفرم کاملاً مدیریت‌شده برای میزبانی و اجرای پروژه‌های لاراول است. این سرویس توسط تیم لاراول ساخته شده و تمام نیازهای زیرساختی برنامه‌های Laravel را خودکارسازی می‌کند. شما فقط کد خود را روی یک مخزن گیت (Git) قرار می‌دهید، و Laravel Cloud آن را به‌طور خودکار اجرا و مدیریت می‌کند.

کاربردهای Laravel Cloud:

1️⃣ استقرار سریع و بدون دردسر → بدون نیاز به تنظیم سرور یا پیکربندی‌های خاص.
2️⃣ مدیریت ساده → پایگاه‌داده، کش (Redis)، ذخیره‌سازی فایل و سایر خدمات از قبل تنظیم شده‌اند.
3️⃣ مقیاس‌بندی خودکار → در صورت افزایش ترافیک، منابع سرور به‌طور خودکار افزایش می‌یابند.
4️⃣ امنیت و پایداری بالا → شامل گواهی SSL، فایروال و محافظت در برابر حملات DDoS.
5️⃣ دیپلوی بدون قطعی → تغییرات جدید بدون توقف سرویس اعمال می‌شوند.

🔹چرا مهم است؟ Laravel Cloud نیاز به مدیریت دستی سرور و تنظیمات پیچیده را از بین می‌برد و به شما اجازه می‌دهد روی توسعه‌ی نرم‌افزار تمرکز کنید.


🔸بخش دوم: Laravel Cloud چگونه کار می‌کند؟

بر اساس مدل پلتفرم به عنوان سرویس (PaaS) کار می‌کند. روند کلی استفاده از آن به این صورت است:

1️⃣ مخزن گیت پروژه‌ی خود را متصل کنید → Laravel Cloud به‌طور خودکار کد را دریافت می‌کند.
2️⃣ ساخت و اجرای خودکار برنامه → بدون نیاز به کانفیگ سرور، برنامه‌ی شما روی ابر اجرا می‌شود.
3️⃣ مدیریت خودکار منابع → پایگاه‌داده، کش، ذخیره‌سازی و سایر منابع به‌صورت خودکار تنظیم می‌شوند.
4️⃣ مقیاس‌بندی هوشمند → با افزایش ترافیک، سیستم به‌طور خودکار سرورهای بیشتری اضافه می‌کند.
5️⃣ مانیتورینگ و پشتیبان‌گیری خودکار → شما می‌توانید مصرف منابع و لاگ‌های برنامه را مشاهده و تحلیل کنید.

🔹 ویژگی مهم: دیگر نیازی به دست‌وپنجه نرم کردن با تنظیمات Nginx، PHP-FPM، یا سرورهای اختصاصی ندارید!


🔸بخش سوم: مزایای Laravel Cloud برای توسعه‌دهندگان

ویژگی‌های متعددی را در اختیار توسعه‌دهندگان قرار می‌دهد که آن را از سایر روش‌های استقرار متمایز می‌کند:

1️⃣ استقرار آسان و سریع
- دیگر نیازی به کانفیگ پیچیده‌ی سرور، SSH، یا Docker ندارید.
- کافی است کد خود را Push کنید و Laravel Cloud به‌طور خودکار آن را اجرا می‌کند.

2️⃣ مدیریت پایگاه‌داده و کش
- پایگاه‌داده MySQL و PostgreSQL به‌طور مستقیم در سرویس وجود دارد.
- ردیس Redis برای کش و S3 برای ذخیره‌سازی فایل از پیش پیکربندی شده‌اند.

3️⃣ امنیت و مقیاس‌پذیری
- ترافیک سایت شما از طریق Cloudflare محافظت می‌شود.
- حملات DDoS و درخواست‌های مخرب مسدود می‌شوند.
- برنامه شما می‌تواند خودکار مقیاس‌بندی شود و در برابر افزایش ناگهانی ترافیک مقاوم باشد.

4️⃣ مانیتورینگ و اشکال‌زدایی ساده
- یک داشبورد برای مشاهده مصرف CPU، حافظه، لاگ‌ها و میزان درخواست‌های ورودی ارائه شده است.
- امکان مشاهده و جستجو در لاگ‌های برنامه برای رفع سریع خطاها.

5️⃣ همکاری تیمی
- شما می‌توانید اعضای تیم خود را اضافه کنید و دسترسی‌های مختلفی به آن‌ها بدهید.

🔹 نتیجه: Laravel Cloud یک راهکار سریع، ایمن، و بدون دردسر برای استقرار برنامه‌های لاراول است.


🔸بخش چهارم: آیا برای استفاده از Laravel Cloud نیاز به دانش DevOps است؟

خیر! Laravel Cloud به‌گونه‌ای طراحی شده است که تمام کارهای DevOps را خودکار انجام دهد. این سرویس تمام مراحل مدیریت سرور، بهینه‌سازی، مقیاس‌بندی، امنیت و پشتیبان‌گیری را برای شما انجام می‌دهد.

با این حال، آشنایی با مفاهیم زیر می‌تواند به شما کمک کند:
- استفاده از Git برای مدیریت کدها.
- آشنایی با متغیرهای محیطی (Environment Variables).
- درک مفاهیم استقرار و مدیریت پایگاه‌داده.

🔹 نتیجه: شما نیازی به دانش DevOps ندارید و می‌توانید مستقیماً از Laravel Cloud برای اجرای پروژه‌های خود استفاده کنید.

🔹مزایای اصلی Laravel Cloud:

استقرار سریع و خودکار
پشتیبانی از پایگاه‌داده، کش و ذخیره‌سازی
مقیاس‌پذیری هوشمند و امنیت بالا
دیپلوی بدون قطعی و پشتیبان‌گیری خودکار
بدون نیاز به دانش DevOps




کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
👏9👍62🔥2❤‍🔥1🤩1
کانال آموزشی لاراول pinned «انقلابی در استقرار برنامه‌های لاراول Laravel Cloud در لاراول ۱۲ یک سرویس ابری جدید است که همراه با نسخه ۱۲ لاراول معرفی شده است. هدف آن ساده‌سازی استقرار (Deployment) و مدیریت برنامه‌های لاراول در فضای ابری است، بدون نیاز به تنظیمات پیچیده یا دانش DevOps…»
کانال آموزشی لاراول
Photo
🔒 جلوگیری از Race Condition در لاراول با lockForUpdate – راهکاری برای مدیریت هم‌زمانی در دیتابیس

در لاراول یک متد مهم به نام ()lockForUpdate وجود دارد که برای جلوگیری از مشکلات Race Condition در هنگام تغییر داده‌ها در پایگاه داده استفاده می‌شود.

🛠 اصلا Race Condition چیست؟

در واقع Race Condition زمانی رخ می‌دهد که دو یا چند درخواست هم‌زمان سعی می‌کنند یک رکورد مشخص در دیتابیس را تغییر دهند. اگر مکانیزم درستی برای مدیریت این وضعیت وجود نداشته باشد، ممکن است مقدار داده‌ها اشتباه ثبت شود یا اطلاعات از بین برود.

⚙️ چگونه ()lockForUpdate کمک می‌کند؟

متد ()lockForUpdate هنگام اجرای یک کوئری انتخابی (SELECT)، آن رکورد را تا پایان تراکنش جاری (Transaction) قفل می‌کند. یعنی اگر درخواست‌های دیگر سعی کنند همان رکورد را تغییر دهند، باید منتظر بمانند تا این تراکنش کامل شود و قفل آزاد شود.

📌 مثال عملی در Laravel

فرض کنید در یک سیستم فروش، چندین کاربر هم‌زمان در حال تلاش برای تغییر وضعیت (status) یک سفارش هستند. اگر هیچ سیستمی برای جلوگیری از Race Condition وجود نداشته باشد، ممکن است دو نفر به‌طور هم‌زمان وضعیت سفارش را تغییر دهند و باعث بروز خطا شوند.

راه‌حل با ()lockForUpdate:

در این مثال، ابتدا رکورد موردنظر را قفل می‌کنیم و سپس تغییرات را اعمال می‌کنیم:


DB::transaction(function () {
$order = Order::where('id', 1)->lockForUpdate()->first();

// تغییر وضعیت سفارش
$order->status = 'processing';
$order->save();
});


🔹 توضیح:

- با ()lockForUpdate رکورد را قفل می‌کنیم.
- سایر درخواست‌ها باید منتظر بمانند تا این تراکنش کامل شود.
- بعد از انجام تغییرات، وضعیت جدید در دیتابیس ذخیره می‌شود.

❗️ نکات مهم

- به خاطر داشته باشید که ()lockForUpdate فقط در داخل تراکنش (transaction) کار می‌کند، پس باید همیشه درون ()DB::transaction استفاده شود.

- این روش روی پایگاه داده‌هایی مانند MySQL و PostgreSQL که از قفل‌های سطح رکورد پشتیبانی می‌کنند، کار می‌کند.

- اگر به خواندن (SELECT) بدون قفل‌گذاری نیاز دارید، می‌توانید از ()sharedLock استفاده کنید.





کانال تخصصی لاراول
📌 @PapiDon_state

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding
👍172👏1🙏1