کانال آموزشی لاراول
رفتن به کانال در Telegram
3 453
مشترکین
اطلاعاتی وجود ندارد24 ساعت
+27 روز
-2730 روز
در حال بارگیری داده...
کانالهای مشابه
ابر برچسبها
هیچ دادهای
مشکلی وجود دارد؟ لطفاً صفحه را تازه کنید یا با مدیر پشتیبانی ما تماس بگیرید.
اشارات ورودی و خروجی
---
---
---
---
---
---
جذب مشترکین
دسامبر '24
دسامبر '24
+30
در 0 کانالها
نوامبر '24
+46
در 0 کانالها
Get PRO
اکتبر '24
+45
در 0 کانالها
Get PRO
سپتامبر '24
+42
در 0 کانالها
Get PRO
اوت '24
+60
در 0 کانالها
Get PRO
ژوئیه '24
+49
در 0 کانالها
Get PRO
ژوئن '24
+65
در 0 کانالها
Get PRO
مه '24
+62
در 1 کانالها
Get PRO
آوریل '24
+49
در 0 کانالها
Get PRO
مارس '24
+91
در 0 کانالها
Get PRO
فوریه '24
+73
در 0 کانالها
Get PRO
ژانویه '24
+89
در 1 کانالها
Get PRO
دسامبر '23
+98
در 1 کانالها
Get PRO
نوامبر '23
+81
در 2 کانالها
Get PRO
اکتبر '23
+48
در 0 کانالها
Get PRO
سپتامبر '23
+46
در 0 کانالها
Get PRO
اوت '23
+106
در 0 کانالها
Get PRO
ژوئیه '23
+138
در 0 کانالها
Get PRO
ژوئن '23
+125
در 0 کانالها
Get PRO
مه '23
+121
در 0 کانالها
Get PRO
آوریل '23
+96
در 0 کانالها
Get PRO
مارس '23
+100
در 0 کانالها
Get PRO
فوریه '23
+94
در 0 کانالها
Get PRO
ژانویه '23
+146
در 0 کانالها
Get PRO
دسامبر '22
+84
در 0 کانالها
Get PRO
نوامبر '22
+132
در 0 کانالها
Get PRO
اکتبر '22
+161
در 0 کانالها
Get PRO
سپتامبر '22
+111
در 0 کانالها
Get PRO
اوت '22
+132
در 0 کانالها
Get PRO
ژوئیه '22
+140
در 0 کانالها
Get PRO
ژوئن '22
+98
در 0 کانالها
Get PRO
مه '22
+219
در 0 کانالها
Get PRO
آوریل '22
+144
در 0 کانالها
Get PRO
مارس '22
+153
در 0 کانالها
Get PRO
فوریه '22
+103
در 0 کانالها
Get PRO
ژانویه '22
+168
در 0 کانالها
Get PRO
دسامبر '21
+168
در 0 کانالها
Get PRO
نوامبر '21
+165
در 0 کانالها
Get PRO
اکتبر '21
+189
در 0 کانالها
Get PRO
سپتامبر '21
+172
در 0 کانالها
Get PRO
اوت '21
+254
در 0 کانالها
Get PRO
ژوئیه '21
+215
در 0 کانالها
Get PRO
ژوئن '21
+238
در 0 کانالها
Get PRO
مه '21
+184
در 0 کانالها
Get PRO
آوریل '21
+428
در 0 کانالها
Get PRO
مارس '21
+129
در 0 کانالها
Get PRO
فوریه '21
+97
در 0 کانالها
Get PRO
ژانویه '21
+261
در 0 کانالها
Get PRO
دسامبر '20
+1 575
در 0 کانالها
| تاریخ | رشد مشترکین | اشارات | کانالها | |
| 26 دسامبر | +1 | |||
| 25 دسامبر | +2 | |||
| 24 دسامبر | +2 | |||
| 23 دسامبر | +1 | |||
| 22 دسامبر | +3 | |||
| 21 دسامبر | +2 | |||
| 20 دسامبر | 0 | |||
| 19 دسامبر | 0 | |||
| 18 دسامبر | +1 | |||
| 17 دسامبر | +1 | |||
| 16 دسامبر | +1 | |||
| 15 دسامبر | 0 | |||
| 14 دسامبر | +2 | |||
| 13 دسامبر | +1 | |||
| 12 دسامبر | 0 | |||
| 11 دسامبر | 0 | |||
| 10 دسامبر | 0 | |||
| 09 دسامبر | 0 | |||
| 08 دسامبر | +3 | |||
| 07 دسامبر | +1 | |||
| 06 دسامبر | 0 | |||
| 05 دسامبر | +1 | |||
| 04 دسامبر | 0 | |||
| 03 دسامبر | +1 | |||
| 02 دسامبر | +2 | |||
| 01 دسامبر | +5 |
پستهای کانال
"In der Ruhe liegt die Kraft."
آلمانی ها میگن : قدرت در آرامش نهفته است.
با یه برداشت آزاد ازین ضرب المثل داشتم به این فکر میکردم که تفاوت بین یه سینیور و جونیور دقیقا همینجاست، فارغ از تجربه کاری.
ازین آرامشی میاد که تسلط به خودش داره.
یعنی شاید لزوما هم در اون مورد خاص هم جوابی نداشته باشه ها در لحظه !
ولی اون دل ناآرام جونیور عاملی میشه برای دست و پا زدن های بی دلیل خودش که در نهایت فروتر میره !
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding
| 2 | گاهی حس میکنم ریفکتور کردن کدها شده بخشی از DNA من! یهو میزنم زیر codebase و شروع میکنم به بهینهسازی یا سبکتر کردن کدها. تو هم این حس رو داری که کد رو هی دستکاری کنی، یا وقتی کار میکنه، میگی دیگه چه کاریه؟ | 732 |
| 3 | 🔔نکات کلیدی درباره 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 | 695 |
| 4 | بدون متن... | 566 |
| 5 | "فکر میکنی زمانی شروع میکنی که همه چیز کامل باشد، اما باور کن که چنین اتفاقی هیچوقت نخواهد افتاد. و حتی اگر هم بیافتد، آن زمان دیگر خیلی دیر شده است."
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding | 711 |
| 6 | بدون متن... | 1 |
| 7 | ✨ استفاده از متد 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 | 1 073 |
| 8 | بدون متن... | 865 |
| 9 | ✨ استفاده از متد parent$ در لایووایر ۳
🤔 اکشنها در لایووایر چیست؟
در لایووایر (Livewire) مفهومی به نام "اکشنها" وجود دارد که به شما اجازه میدهد تا از طریق رویدادها (events) و دستورات (actions)، ارتباط موثری بین کامپوننتهای مختلف برقرار کنید. یکی از امکانات مفید در این زمینه، استفاده از متد parent$ است.
متد $parent به شما این امکان را میدهد که از داخل یک کامپوننت فرزند به کامپوننت والد خود دسترسی پیدا کنید. این کار زمانی مفید است که میخواهید از داخل فرزند، عملیاتی در والد اجرا کنید یا دادهای به آن بفرستید.
⚙️ متد $parent چطور کار میکند؟
زمانی که یک کامپوننت فرزند میخواهد مستقیماً به یک متد یا ویژگی (property) در کامپوننت والد دسترسی پیدا کند، به جای استفاده از سیستم پیچیدهای مثل رویدادها (dispatching events)، میتواند به راحتی از parent$ استفاده کند.
مثال:
فرض کنید ما یک کامپوننت والد به نام ParentComponent داریم که حاوی متدی به نام ()increaseCounter است. حالا یک کامپوننت فرزند داریم به نام ChildComponent که باید بتواند این متد را اجرا کند.
در کامپوننت فرزند، شما میتوانید به راحتی این کار را انجام دهید:
class ChildComponent extends Component
{
public function callParentMethod()
{
$this->parent->increaseCounter();
}
}
در اینجا، با استفاده از parent$`، کامپوننت فرزند مستقیماً متد ()increaseCounter` را در والد فراخوانی میکند.
🕰 کی از parent$ استفاده کنیم؟
حالا سوال این است که چه زمانی بهتر است از متد $parent استفاده کنیم؟
✅ زمان مناسب استفاده از parent$:
- ارتباط مستقیم بین فرزند و والد: وقتی که نیاز دارید کامپوننت فرزند به سادگی به یک متد یا ویژگی در والد دسترسی پیدا کند و این ارتباط کاملاً مستقیم و ساده است.
- پیچیدگی کم: وقتی که سیستم شما ساده است و استفاده از رویدادها باعث پیچیدگی بیمورد میشود.
- تعداد کم کامپوننتها: وقتی تعداد کامپوننتهای فرزند و والد محدود و مشخص است و نیاز به ارتباطات پیچیده ندارید.
🚫 زمانی که نباید از parent$ استفاده کنید:
- کامپوننتهای زیاد یا پیچیده: وقتی ساختار برنامه شما به شدت پیچیده است و تعداد زیادی کامپوننت تو در تو دارید، استفاده از parent$ باعث میشود که کامپوننتها به شدت به یکدیگر وابسته شوند و نگهداری و توسعه کد مشکل شود.
- ارتباطات غیرمستقیم یا وابسته به دادههای پیچیده: اگر قرار است دادهها یا رویدادهای پیچیدهای بین چندین کامپوننت رد و بدل شود، بهتر است از رویدادها (dispatching events) استفاده کنید.
🎯 رویدادها (Dispatching Events) چیست؟
در لایووایر، یک روش دیگر برای ارتباط بین کامپوننتها ارسال و شنیدن رویدادها است. این روش زمانی مناسب است که شما نیاز دارید ارتباطات بین کامپوننتها را مستقلتر و کمتر وابسته به یکدیگر کنید.
🔔 مزایای استفاده از رویدادها:
1️⃣ استقلال کامپوننتها: کامپوننتها مستقل از یکدیگر هستند و فقط از طریق رویدادها با هم ارتباط برقرار میکنند. این باعث میشود که تغییرات در یک کامپوننت، تأثیری روی دیگری نگذارد.
2️⃣ قابلیت توسعه بالا: وقتی برنامه شما بزرگتر و پیچیدهتر میشود، استفاده از رویدادها باعث میشود مدیریت ارتباطات بین کامپوننتها سادهتر باشد.
3️⃣ ارتباطات چند طرفه: شما میتوانید یک رویداد را از یک کامپوننت ارسال کرده و چندین کامپوننت دیگر آن را گوش دهند و پاسخ دهند.
مثال از رویدادها:
فرض کنید یک کامپوننت فرزند میخواهد پیامی را به والد خود بفرستد. شما میتوانید از متد ()dispatch استفاده کنید:
$this->dispatch('eventName', ['data' => $someData]);
در والد میتوانید با استفاده از ()listen این رویداد را گوش دهید:
use Livewire\Attributes\On;
#[On('eventName')]
public function handleEvent($data)
{
// کار مورد نظر را انجام دهید
}
5️⃣ تفاوت parent$ و dispatching events ⚖️
$parent
- ارتباط مستقیم بین کامپوننت فرزند و والد.
- سریعتر و سادهتر برای کاربردهای کمپیچیدگی.
- وابستگی بالا بین کامپوننتها.
- مناسب برای سیستمهای ساده.
Dispatching Events
- ارتباط غیرمستقیم بین کامپوننتها.
- کاهش وابستگی بین کامپوننتها.
- مناسب برای سیستمهای پیچیده و بزرگ.
- مدیریت بهتر در برنامههای پیچیده و چندکامپوننتی.
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding | 14 |
| 10 | بدون متن... | 1 |
| 11 | 🎓 وظیفه و کاربرد ()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 | 1 122 |
| 12 | بدون متن... | 932 |
| 13 | 🎓 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 | 1 232 |
| 14 | بدون متن... | 950 |
| 15 | تغییرات مسیریابی در لاراول 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 | 1 145 |
| 16 | بدون متن... | 937 |
| 17 | 🤓 کتابهایی که هر مهندس نرمافزاری باید در سال ۲۰۲۴ بخواند ...
🔖The Pragmatic Programmer The Pragmatic Programmer
David Thomas and Andrew Hunt
این کتاب توصیههای عملی و حرفهای برای توسعهدهندگان ارائه میدهد. موضوعاتی مانند مسئولیتپذیری شخصی و توسعه حرفهای تا تکنیکهای معماری را پوشش میدهد. با وجود اینکه در سال ۱۹۹۹ نوشته شده است، هنوز در بسیاری از جنبهها معتبر است. ویژگی منحصر به فرد این کتاب این است که به صورت عملی با مجموعهای از نکات برای بهبود فرآیند توسعه به شما آموزش میدهد.
🔖The Pragmatic Programmer Modern Software Engineering
David Farley
این کتاب بر ساخت نرمافزار عالی تمرکز دارد و نویسنده یک چارچوب محکم برای اتصال بهترین شیوهها مانند Continuous Delivery (CD)، معماری شش ضلعی و Test-Driven Development به ایدههای اصلی در مهندسی نرمافزار ارائه میدهد. او همچنین در مورد تاریخچه توسعه نرمافزار و ایدههایی که صنعت را تغییر دادهاند، مینویسد.
🔖The Pragmatic Programmer Code Complete: A Practical Handbook of Software Construction
Steve McConnell
یکی از کتابهایی که بیش از ۱۵ سال پیش نوشته شده و هنوز معتبر است. این کتاب به طراحی، کدنویسی، اشکالزدایی و تست میپردازد. در بیش از ۹۰۰ صفحه، نویسندگان نحوه نوشتن برنامهها برای مردم اول و سپس برای کامپیوترها، چگونگی تقسیم کد به دامنهها و چگونگی تسلط بر ویژگیهای انسانی بهترین برنامهنویسان (تواضع، کنجکاوی و مهمتر از همه، کنترل اگو) را توضیح میدهند.
🔖The Pragmatic Programmer Software Engineering at Google
Titus Winters, Tom Manshreck, and Hyrum Wright
این کتاب درباره برنامهنویسی نیست، بلکه در مورد شیوههای مهندسی در گوگل برای حفظ و سلامت کدپایه آنها است. در این کتاب، تفاوت بین مهندسی نرمافزار و برنامهنویسی، اهمیت قانون بیانسه، و چگونگی تست صحیح چیزها و انتشار کوچک و مکرر را خواهید آموخت.
🔖The Pragmatic Programmer Head First Design Patterns
Eric Freeman
این کتاب الگوهای طراحی اصلی نرمافزار را برای ایجاد طراحیهای انعطافپذیرتر، شیکتر و قابل استفاده مجدد بدون نیاز به کشف مجدد راهحلهای طراحی توصیف میکند. این کتاب به سبک کتابهای For Dummies نوشته شده است، به طوری که برای مبتدیان قابل فهم باشد.
🔖The Pragmatic Programmer Grokking Algorithms
Aditya Bhargava
این کتاب به زبانی ساده درباره کاربرد الگوریتمهای استاندارد در مسائل روزمره توسعهدهندگان توضیح میدهد. از مرتبسازی و جستجو شروع میکند و سپس به فشردهسازی دادهها و هوش مصنوعی با نمونه کدهایی در پایتون میپردازد. احتمالاً بهترین کتاب برای شروع یادگیری الگوریتمها است.
🔖The Pragmatic Programmer Designing Data-Intensive Applications
Martin Kleppman
این کتاب مفاهیم پیشرفته داده مانند پایگاههای داده و مدلهای داده و مفاهیم توزیعشده مانند تراکنشها، تکرار، سازگاری و غیره را توضیح میدهد. این کتاب یکی از تأثیرگذارترین کتابها در این دسته است.
🔖The Pragmatic Programmer Growing Object-Oriented Software by Tests
Steve Freeman
نویسندگان رویههای خود، اهداف طراحی و برخی ابزارهایی که برای انجام کار استفاده میکنند را شرح میدهند. در یک مثال گسترده، خواهید فهمید که چگونه TDD در چند سطح عمل میکند، با استفاده از تستها برای هدایت ویژگیهای کد و ساختار شیءگرا و استفاده از اشیاء شبیهسازیشده برای یافتن و سپس تعریف پیوندها بین اشیاء.
🔖The Pragmatic Programmer A Philosophy of Software Design
John Ousterhout
این کتاب توضیح میدهد که چگونه سیستمهای نرمافزاری پیچیده را به قطعات قابل پیادهسازی مستقل تقسیم کنیم. سپس به مسائل فلسفی در مورد نحوه برخورد با فرآیند طراحی نرمافزار میپردازد و فهرستی از راهنماییهای طراحی برای دنبال کردن ارائه میدهد. این کتاب همچنین فهرستی از علائم هشدار برای طراحی بد ارائه میدهد. این کتاب یک همراه عالی برای Clean Code است زیرا دیدگاه متفاوتی ارائه میدهد.
📁 #Skills
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامهنویسی
📌 @PapiDon_coding | 874 |
| 18 | ✨ Start where you are. Use what you have. Do what you can.
از جایی که هستید شروع کنید. از آنچه دارید استفاده کنید. آنچه میتوانید انجام دهید. | 967 |
| 19 | سلام رفقا
بعد از یه مدت نبودن، دوباره برگشتیم پر از انرژی 🫶
⚡️ نگاهی به ویژگیهای جدید PHP 8.4
به زودی PHP 8.4 منتشر میشود و در این مطلب به بررسی ویژگیهای اعلامشده و امکانات جدید این نسخه خواهیم پرداخت.
📅 زمان انتشار PHP 8.4 چه تاریخی است؟
انتشار رسمی PHP 8.4 برای ۲۱ نوامبر ۲۰۲۴ برنامهریزی شده است. پیش از انتشار رسمی، این نسخه طی ۶ ماه مراحل پیشانتشار را از آلفا، بتا و کاندیداهای انتشار طی میکند.
💥 Property Hooks در PHP
از زبانهایی مثل Kotlin، C# و Swift الهام گرفته شده است. این ویژگی شامل دو نوع سینتکس متفاوت است که شبیه به closures کوتاه و چند خطی هستند:
class User implements Named
{
private bool $isModified = false;
public function __construct(
private string $first,
private string $last
) {}
public string $fullName {
// بازنویسی اکشن "خواندن" با منطق دلخواه
get => $this->first . " " . $this->last;
// بازنویسی اکشن "نوشتن" با منطق دلخواه
set {
[$this->first, $this->last] = explode(' ', $value, 2);
$this->isModified = true;
}
}
}
🤓 در واقع Property hooks کمک میکنند تا از کدهای زائد مربوط به getter و setter های خاصیتها خلاص شویم و به یک خاصیت اجازه میدهد که دسترسی و بهروزرسانیها را با استفاده از hooks تعریف کند.
☄️ دسترسی به اعضای کلاس بدون پرانتز
از زمان معرفی دسترسی به اعضای کلاس هنگام نمونهسازی، شما باید ()new MyClass را در پرانتز قرار دهید، وگرنه با خطا مواجه میشوید. سینتکس پیشنهادی به شما این امکان را میدهد که به ثوابت، خصوصیات و متدها بدون نیاز به پرانتز اضافی دسترسی داشته باشید:
// پرانتزهای اضافی برای دسترسی به اعضای کلاس مورد نیاز هستند
$request = (new Request())->withMethod('GET')->withUri('/hello-world');
// خطا PHP (<= PHP 8.3): syntax error, unexpected token "->"
$request = new Request()->withMethod('GET')->withUri('/hello-world');
⌛ این بهروزرسانی مشکل کوچک دسترسی به اعضای کلاس را سادهتر میکند، بهطوری که نیازی به افزودن پرانتزهای اضافی یا استفاده از متد سازنده استاتیک نخواهد بود. این تغییر سینتکس PHP را بیشتر با زبانهای C مانند جاوا، #C و TypeScript همسو میکند که نیازی به پرانتزهای احاطهکننده ندارند.
🔗 برای مطالعه بیشتر PHP 8.4
✅ کانال تخصصی لاراول
📌 @PapiDon_state
☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding | 1 660 |
| 20 | بدون متن... | 1 184 |
