کانال آموزشی لاراول @papidon_state Channel on Telegram

کانال آموزشی لاراول

@papidon_state


📌 کانال اتاق برنامه نویسی
@PapiDon_coding

کانال آموزشی لاراول (Persian)

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

پی دن که مدیریت این کانال را بر عهده دارد، تمام تلاش خود را می‌کند تا اطلاعات به روز و کاربردی در زمینه لاراول را با اعضای کانال به اشتراک بگذارد. از آموزش های پایه تا تکنیک‌های پیشرفته، تمامی مباحث مربوط به این فریم ورک محبوب برنامه نویسی را می‌توانید در اینجا پیدا کنید

آموزش های ویدیویی، مقالات تخصصی، نمونه کد های عملی، وبینارها و مطالب جذاب دیگر از جمله محتواهایی هستند که شما را به دنیای فریم ورک لاراول هدایت می‌کنند. با عضویت در کانال آموزشی لاراول، می‌توانید به روز با آخرین تکنیک‌ها و ابزارهای لاراول بمانید و مهارت های خود را به سطح بالاتری برسانید

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

کانال آموزشی لاراول

27 Sep, 14:44


"In der Ruhe liegt die Kraft."

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

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

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

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


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

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding

کانال آموزشی لاراول

26 Sep, 19:05


کانال آموزشی لاراول pinned «گاهی حس می‌کنم ریفکتور کردن کدها شده بخشی از DNA من! یهو می‌زنم زیر codebase و شروع می‌کنم به بهینه‌سازی یا سبک‌تر کردن کدها. تو هم این حس رو داری که کد رو هی دست‌کاری کنی، یا وقتی کار می‌کنه، می‌گی دیگه چه کاریه؟»

کانال آموزشی لاراول

26 Sep, 16:51


کانال آموزشی لاراول pinned «🔔نکات کلیدی درباره Livewire و امنیت داده‌ها 1️⃣ دیتای Public و امنیت آن در Livewire، تمام ویژگی‌های public موجود در کنترلر کامپوننت به یک آبجکت جاوااسکریپت تبدیل شده و به سمت کلاینت ارسال می‌شوند. یعنی هر کسی می‌تونه این داده‌ها رو از طریق DevTools یا…»

کانال آموزشی لاراول

26 Sep, 16:48


🔔نکات کلیدی درباره 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

کانال آموزشی لاراول

25 Sep, 16:45


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


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

☕️ اتاق برنامه‌نویسی
📌 @PapiDon_coding

کانال آموزشی لاراول

11 Sep, 15:50


استفاده از متد 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

کانال آموزشی لاراول

26 Aug, 14:46


🎓 وظیفه و کاربرد ()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

کانال آموزشی لاراول

23 Aug, 14:22


🎓 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

کانال آموزشی لاراول

21 Aug, 15:07


تغییرات مسیریابی در لاراول 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

کانال آموزشی لاراول

31 May, 17:23


🤓 کتاب‌هایی که هر مهندس نرم‌افزاری باید در سال ۲۰۲۴ بخواند ...

🔖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

کانال آموزشی لاراول

30 May, 04:47


Start where you are. Use what you have. Do what you can.

از جایی که هستید شروع کنید. از آنچه دارید استفاده کنید. آنچه می‌توانید انجام دهید.




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

☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding

کانال آموزشی لاراول

17 May, 18:40


سلام رفقا
بعد از یه مدت نبودن، دوباره برگشتیم پر از انرژی 🫶


⚡️ نگاهی به ویژگی‌های جدید 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

کانال آموزشی لاراول

21 Mar, 07:13


آموزش اضافه کردن Middleware در لاراول 11

امروز می‌خواهم با شما درباره یکی از نوآوری‌های جذاب در نسخه 11 لاراول، یعنی نحوه تعریف و استفاده از Middleware، به اشتراک بگذارم.

🤔 چرا Middleware ؟

در واقع Middlewareها بخش مهمی از هر اپلیکیشن وب هستند که به ما اجازه می‌دهند درخواست‌های وارد شده به اپلیکیشن را پیش از رسیدن به هسته‌ی اپلیکیشن (Core) یا بعد از ارسال پاسخ، فیلتر یا تغییر دهیم. این امکان از جمله کاربردهایی مانند احراز هویت، ثبت لاگ، و مدیریت دسترسی را فراهم می‌کند.

🔄 اما تغییرات در لاراول 11

در نسخه‌های پیشین لاراول، Middleware`ها را در فایل `Kernel.php تعریف می‌کردیم. اما در نسخه 11، لاراول یک رویکرد جدید را معرفی کرده که تعریف Middleware`ها را در فایل `bootstrap/app.php انجام می‌دهیم.

🛠 گام به گام تا اضافه کردن Middleware

1️⃣ ایجاد Middleware: با دستور زیر Middleware مورد نظر خود را ایجاد کنید:

php artisan make:middleware OrgCustomerAuthenticate


2️⃣ تعریف Middleware : Middleware ایجاد شده را در فایل bootstrap/app.php با استفاده از متد withMiddleware و alias تعریف کنید:


->withMiddleware(function (Middleware $middleware) {
$middleware->alias([
'auth.org_customer' => \App\Http\Middleware\OrgCustomerAuthenticate::class,
]);
})



3️⃣ اعمال Middleware به روت‌ها: حالا می‌توانید این Middleware را به روت یا گروهی از روت‌ها اعمال کنید:
Route::prefix('/panel')->middleware('auth.org_customer')->group(function() {
Route::get('/', [PanelController::class, 'index'])->name('panelSide');
});


🗝 نکات کلیدی

🔸به خاطر داشته باشید که این تغییرات به شما اجازه می‌دهند با ساختار ساده‌تر و انعطاف‌پذیرتری در پروژه‌های لاراولی خود کار کنید.

🔸استفاده از این روش جدید، مدیریت Middlewareها در لاراول 11 را بسیار روان‌تر می‌کند.




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

☕️ اتاق برنامه نویسی </>
📌 @PapiDon_coding