🚀
📌 سه مدل داریم:
🧐 میخواهیم همه پستهایی که توسط کاربران یک کشور خاص منتشر شده است را پیدا کنید. اگر مستقیما بخواهیم این کار را انجام دهیم، باید ابتدا تمام کاربران آن کشور را پیدا کرده و سپس همه پستهای آنها را جمعآوری کنیم.
🎉 راهحل با
🚀 به راحتی میتوانیم تمام پستهای منتشر شده در یک کشور را پیدا کنیم
hasManyThrough📌 سه مدل داریم:
Country`، `User و Post. هر کاربر (User) در یک کشور (Country) زندگی میکند و هر کاربر میتواند چندین پست (Post) داشته باشد.🧐 میخواهیم همه پستهایی که توسط کاربران یک کشور خاص منتشر شده است را پیدا کنید. اگر مستقیما بخواهیم این کار را انجام دهیم، باید ابتدا تمام کاربران آن کشور را پیدا کرده و سپس همه پستهای آنها را جمعآوری کنیم.
🎉 راهحل با
hasManyThrough: با استفاده از این رابط، میتوانیم به طور مستقیم به پستهای مرتبط با کشور دسترسی پیدا کنیم، بدون نیاز به پیمایش کاربران.class Country extends Model
{
public function posts()
{
return $this->hasManyThrough(
Post::class,
User::class,
'country_id', // foreign key on User table
'user_id', // foreign key on Post table
'id', // local key on Country table
'id' // local key on User table
);
}
}
🚀 به راحتی میتوانیم تمام پستهای منتشر شده در یک کشور را پیدا کنیم
$posts = $country->posts;
👍13❤3
🌟 Your biggest risk isn't failing, it's getting too comfortable 🌟
📌 ممکن است فکر کنیم بزرگترین خطر وقتی است که شکست میخوریم. ولی در واقع، خطر واقعی زمانی رخ میدهد که در راحتی غرق میشویم. راحتی میتواند مانع رشد و پیشرفت ما شود. پس هرگز از تلاش و چالشهای جدید کوتاه نیایید، زیرا همین چالشها مسیر یادگیری و رشد شماست.
✨ به جلو بروید، چون راحتی موقتی است، اما یادگیری و رشد، برای همیشه.
#PapiDon
📌 ممکن است فکر کنیم بزرگترین خطر وقتی است که شکست میخوریم. ولی در واقع، خطر واقعی زمانی رخ میدهد که در راحتی غرق میشویم. راحتی میتواند مانع رشد و پیشرفت ما شود. پس هرگز از تلاش و چالشهای جدید کوتاه نیایید، زیرا همین چالشها مسیر یادگیری و رشد شماست.
✨ به جلو بروید، چون راحتی موقتی است، اما یادگیری و رشد، برای همیشه.
#PapiDon
❤9👍2🔥1👏1
🚀 map() with Collection
✨ استفاده از متد
دوستان عزیز، وقتی با کالکشنها کار میکنید، بارها نیاز پیدا میکنید که بر روی هر آیتم از کالکشن تغییراتی اعمال کنید. در اینجا متد
🔹 مثال:
1️⃣ متد ()map کالکشن اصلی را تغییر نمیدهد.
2️⃣ اگر میخواهید هم آیتم و هم کلید آن را استفاده کنید:
✨ استفاده از متد
()map در کالکشنهادوستان عزیز، وقتی با کالکشنها کار میکنید، بارها نیاز پیدا میکنید که بر روی هر آیتم از کالکشن تغییراتی اعمال کنید. در اینجا متد
()map به کمکتان میآید.🔹 مثال:
$numbers = collect([1, 2, 3, 4, 5]);
$squaredNumbers = $numbers->map(function ($number) {
return $number * $number;
});
// نتیجه: [1, 4, 9, 16, 25]
🔸 میتوانید حتی برای مدلها هم از این متد استفاده کنید:$users = User::all();
$fullNames = $users->map(function ($user) {
return $user->first_name . ' ' . $user->last_name;
});
📍 نکات مهم:1️⃣ متد ()map کالکشن اصلی را تغییر نمیدهد.
2️⃣ اگر میخواهید هم آیتم و هم کلید آن را استفاده کنید:
$items = collect(['a' => 1, 'b' => 2, 'c' => 3]);
$mapped = $items->map(function ($value, $key) {
return $key . '-' . ($value * 2);
});
// نتیجه: ['a-2', 'b-4', 'c-6']
#PapiDon❤14👍1
✨ Livewire v3 Has Been Released
لایووایر نسخه v3 منتشر شده است.
https://livewire.laravel.com/docs/quickstart
📌 استفاده از آلپاین
لایووایر v3 آلپاین را برای انجام کارهای سنگین بهرهبرداری میکند. با ثبت افزونههای آلپاین، لایووایر اکنون اجازه میدهد تا آلپاین انجام کارهای سنگین را انجام دهد.
این همچنین به این معناست که آلپاین اکنون به صورت پیشفرض با لایووایر گنجانده شده است، بنابراین نیازی به بارگذاری آلپاین از طریق CDN یا NPM نیست. به طور خودکار جاسازی شده است.
علاوه بر این، v3 از افزونه Morph آلپاین برای مقایسه DOM و اعمال بهروزرسانیها به جای morphdom استفاده میکند. این موجب کاهش مشکلات مقایسه DOM و همگامی بهتر بین لایووایر و آلپاین خواهد شد.
لایووایر نسخه v3 منتشر شده است.
https://livewire.laravel.com/docs/quickstart
📌 استفاده از آلپاین
لایووایر v3 آلپاین را برای انجام کارهای سنگین بهرهبرداری میکند. با ثبت افزونههای آلپاین، لایووایر اکنون اجازه میدهد تا آلپاین انجام کارهای سنگین را انجام دهد.
این همچنین به این معناست که آلپاین اکنون به صورت پیشفرض با لایووایر گنجانده شده است، بنابراین نیازی به بارگذاری آلپاین از طریق CDN یا NPM نیست. به طور خودکار جاسازی شده است.
علاوه بر این، v3 از افزونه Morph آلپاین برای مقایسه DOM و اعمال بهروزرسانیها به جای morphdom استفاده میکند. این موجب کاهش مشکلات مقایسه DOM و همگامی بهتر بین لایووایر و آلپاین خواهد شد.
👍9🔥1
🔹
این دستور اجازه میدهد تا دو یا چند ستون را در یک یا چند جدول با یکدیگر مقایسه کنید.
📜 تمام رکوردهایی که
🔸 استفاده از شرطهای مقایسهای:
📜 رکوردهایی را برگردانده که
🔸 مقایسه ستونها در دو جدول مختلف:
فرض کنید دو مدل
📜 در اینجا، کاربرانی که موجودی حساب آنها بیشتر از قیمت کل سفارشهایشان است، را پیدا میکنیم.
🔸 استفاده از چندین شرط در
📜 این کد، کاربرانی را مییابد که نام و نام خانوادگی یکسان دارند و تاریخ ایجاد قبل از تاریخ بروزرسانی است.
whereColumn in Laravelاین دستور اجازه میدهد تا دو یا چند ستون را در یک یا چند جدول با یکدیگر مقایسه کنید.
$records = YourModel::whereColumn('created_at', 'updated_at')->get();📜 تمام رکوردهایی که
created_at و updated_at آنها یکسان است را برمیگرداند.🔸 استفاده از شرطهای مقایسهای:
$records = YourModel::whereColumn('created_at', '<', 'updated_at')->get();📜 رکوردهایی را برگردانده که
created_at آنها قبل از updated_at است.🔸 مقایسه ستونها در دو جدول مختلف:
فرض کنید دو مدل
User و Order داریم:$users = User::join('orders', 'users.id', '=', 'orders.user_id')
->whereColumn('users.account_balance', '>', 'orders.total_price')
->get();📜 در اینجا، کاربرانی که موجودی حساب آنها بیشتر از قیمت کل سفارشهایشان است، را پیدا میکنیم.
🔸 استفاده از چندین شرط در
whereColumn :$users = User::whereColumn([
['first_name', '=', 'last_name'],
['created_at', '<', 'updated_at']
])->get();📜 این کد، کاربرانی را مییابد که نام و نام خانوادگی یکسان دارند و تاریخ ایجاد قبل از تاریخ بروزرسانی است.
👍14❤1
🚀 به زودی پلتفرم ما با آموزشهای جامعتر و گام به گام، همراه با مثالهای بیشتر و جزئی تر، آماده خواهد شد. تا از هر آنچه که میخواهید بیشتر و بهتر بدانید، لذت ببرید. 😊🫶
🔔 اطلاعرسانی مربوط به پلتفرم تنها در همین کانال انجام خواهد شد. 🌟🔥
#PapiDon
🔔 اطلاعرسانی مربوط به پلتفرم تنها در همین کانال انجام خواهد شد. 🌟🔥
#PapiDon
❤🔥16👍5❤1
🔍 مهارتهای اساسی غیرفنی (Soft Skills) برای برنامهنویسان 🔍
همگان میدانند که برنامهنویسان نیاز به مهارتهای فنی خاص خودشان دارند. اما آیا میدانید که مهارتهای غیرفنی نیز در موفقیت آنها نقش پررنگی دارد؟
🔹 1. ارتباط موثر: با مشتریان، تیم و مدیران.
🔹 2. حل مسئله: شناسایی و رفع چالشها.
🔹 3. یادگیری مداوم: با تغییرات فناوری همگام باشید.
🔹 4. کار گروهی: همکاری با افراد با تخصصهای متفاوت.
🔹 5. مدیریت زمان: اولویتبندی و انجام وظایف در زمان مقرر.
🔹 6. پذیرش نقد: استفاده از فیدبک برای بهبود.
🔹 7. مدیریت استرس: مقابله با فشارهای کاری.
🔹 8. رویکرد مشتریمدار: فهم و پاسخ به نیازهای مشتری.
🔹 9. تصمیمگیری: در مواقع حساس و ناخواسته.
🔹 10. مسئولیتپذیری: پذیرش خطاها و یادگیری از آنها.
🚀 هرگز فراموش نکنید که موفقیت در دنیای برنامهنویسی نه تنها به دانش فنی بستگی دارد، بلکه به تواناییهای انسانی و تعامل با دیگران نیز وابسته است.
#PapiDon
@PapiDon_state
همگان میدانند که برنامهنویسان نیاز به مهارتهای فنی خاص خودشان دارند. اما آیا میدانید که مهارتهای غیرفنی نیز در موفقیت آنها نقش پررنگی دارد؟
🔹 1. ارتباط موثر: با مشتریان، تیم و مدیران.
🔹 2. حل مسئله: شناسایی و رفع چالشها.
🔹 3. یادگیری مداوم: با تغییرات فناوری همگام باشید.
🔹 4. کار گروهی: همکاری با افراد با تخصصهای متفاوت.
🔹 5. مدیریت زمان: اولویتبندی و انجام وظایف در زمان مقرر.
🔹 6. پذیرش نقد: استفاده از فیدبک برای بهبود.
🔹 7. مدیریت استرس: مقابله با فشارهای کاری.
🔹 8. رویکرد مشتریمدار: فهم و پاسخ به نیازهای مشتری.
🔹 9. تصمیمگیری: در مواقع حساس و ناخواسته.
🔹 10. مسئولیتپذیری: پذیرش خطاها و یادگیری از آنها.
🚀 هرگز فراموش نکنید که موفقیت در دنیای برنامهنویسی نه تنها به دانش فنی بستگی دارد، بلکه به تواناییهای انسانی و تعامل با دیگران نیز وابسته است.
#PapiDon
@PapiDon_state
❤🔥4❤3👍2
🔍 آشنایی با سیستم LAMP
آیا تا به حال با این سوال روبرو شدهاید که LAMP چیست؟
🌐 What is LAMP ?
مخففی است از مجموعهای از نرمافزارهای متنباز که به صورت ترکیبی برای احداث و بهرهبرداری از وبسایتها و وباپلیکیشنها استفاده میشوند.
🔢 مولفههای LAMP:
1. L: Linux – سیستمعامل مبتنی بر لینوکس
2. A: Apache – وبسرور محبوب و متنباز
3. M: MySQL – پایگاه داده
4. P: PHP – زبان برنامهنویسی (گاهی به Perl یا Python هم میپردازند).
@PapiDon_state
آیا تا به حال با این سوال روبرو شدهاید که LAMP چیست؟
🌐 What is LAMP ?
مخففی است از مجموعهای از نرمافزارهای متنباز که به صورت ترکیبی برای احداث و بهرهبرداری از وبسایتها و وباپلیکیشنها استفاده میشوند.
🔢 مولفههای LAMP:
1. L: Linux – سیستمعامل مبتنی بر لینوکس
2. A: Apache – وبسرور محبوب و متنباز
3. M: MySQL – پایگاه داده
4. P: PHP – زبان برنامهنویسی (گاهی به Perl یا Python هم میپردازند).
@PapiDon_state
👍5❤🔥3
🔍
🎯 ماسک کردن بخشی از رشته با یک کاراکتر خاص (مانند
🔧 نحوه استفاده:
فرض کنید میخواهید چند کاراکتر از یک رشته را مخفی کنید، مثلاً ارقام وسط یک شماره کارت:
و اگر پارامتر دوم را ندهیم از کاراکتر پنجم به بعد رشته
@PapiDon_state
Str::mask()
امروز با شما یک تابع جالب در لاراول به نام ()Str::mask را مرور میکنیم.🎯 ماسک کردن بخشی از رشته با یک کاراکتر خاص (مانند
*).🔧 نحوه استفاده:
فرض کنید میخواهید چند کاراکتر از یک رشته را مخفی کنید، مثلاً ارقام وسط یک شماره کارت:
$card = Str::mask('1234567890123456', 5, 12);
// Result : 1234********3456
در این مثال، کاراکترهای پنجم تا دوازدهم رشته با * جایگزین شدهاند.و اگر پارامتر دوم را ندهیم از کاراکتر پنجم به بعد رشته
* جایگزین خواهد شد.@PapiDon_state
👍20❤3
✨Manage your energy, not your time. If you do that, time works itself out.✨
📌انرژی خود را مدیریت کن، نه زمانت را. اگر این کار را انجام دهی، زمان خود به خود درست میشود
⏳معمولا ما به فکر این هستیم که چگونه زمان خود را به صورت بهینهتری استفاده کنیم، اما اگر انرژیامان را به درستی مدیریت نکنیم، حتی اگر زمان زیادی داشته باشیم، بهرهبرداری مناسبی از آن نخواهیم داشت.
🔋 مدیریت انرژی به مواردی مانند استراحت، تغذیه مناسب، ورزش، روانشناسی و حتی محیط کار مرتبط است. وقتی انرژیامان را به خوبی مدیریت میکنیم، بهرهوری بیشتری خواهیم داشت و زمان خود را به صورت اثربخشتری استفاده میکنیم. از این رو، به جای اینکه تنها روی زمان متمرکز شویم، باید روی انرژیامان هم تمرکز داشته باشیم.
@PapiDon_state
📌انرژی خود را مدیریت کن، نه زمانت را. اگر این کار را انجام دهی، زمان خود به خود درست میشود
⏳معمولا ما به فکر این هستیم که چگونه زمان خود را به صورت بهینهتری استفاده کنیم، اما اگر انرژیامان را به درستی مدیریت نکنیم، حتی اگر زمان زیادی داشته باشیم، بهرهبرداری مناسبی از آن نخواهیم داشت.
🔋 مدیریت انرژی به مواردی مانند استراحت، تغذیه مناسب، ورزش، روانشناسی و حتی محیط کار مرتبط است. وقتی انرژیامان را به خوبی مدیریت میکنیم، بهرهوری بیشتری خواهیم داشت و زمان خود را به صورت اثربخشتری استفاده میکنیم. از این رو، به جای اینکه تنها روی زمان متمرکز شویم، باید روی انرژیامان هم تمرکز داشته باشیم.
@PapiDon_state
👍7❤2💯1
https://laravelpodcast.com/episodes
اگر علاقه دارید که اخبار، موضوعات جدید و کلا هرچیزی درباره دنیای لاراول رو در قالب پادکست بشنوید. اینجا رو حتما بهش یه سری بزنید. 🎙
📌@PapiDon_state
اگر علاقه دارید که اخبار، موضوعات جدید و کلا هرچیزی درباره دنیای لاراول رو در قالب پادکست بشنوید. اینجا رو حتما بهش یه سری بزنید. 🎙
📌@PapiDon_state
The Laravel Podcast
The Laravel Podcast | All Episodes
The Laravel Podcast brings you Laravel and PHP development news and discussion.
👍3
🔥 Laravel Octane 🔥
برای بهینه سازی پروژه های لاراول و افزایش سرعت آنها توسط تیم لاراول ارائه شده است. این پکیج برای رسیدن به چنین عملکردی از یکی از ابزار های Swoole یا RoadRunner (بعنوان Driver) به دلخواه کاربر استفاده میکند.
✅ مزایا:
1️⃣ سرعت بیشتر
2️⃣ همگامسازی کمتر
3️⃣ سازگاری با Laravel
❌ معایب:
1️⃣مشکلات Memory Leaks
2️⃣ چالشها در Stateful Environments
3️⃣ پیچیدگی تنظیمات
4️⃣ سازگاری با برخی افزونهها
🧐 مطالعه بیشتر :
🔗 https://laravel.com/docs/10.x/octane
📌@PapiDon_state
برای بهینه سازی پروژه های لاراول و افزایش سرعت آنها توسط تیم لاراول ارائه شده است. این پکیج برای رسیدن به چنین عملکردی از یکی از ابزار های Swoole یا RoadRunner (بعنوان Driver) به دلخواه کاربر استفاده میکند.
✅ مزایا:
1️⃣ سرعت بیشتر
2️⃣ همگامسازی کمتر
3️⃣ سازگاری با Laravel
❌ معایب:
1️⃣مشکلات Memory Leaks
2️⃣ چالشها در Stateful Environments
3️⃣ پیچیدگی تنظیمات
4️⃣ سازگاری با برخی افزونهها
🧐 مطالعه بیشتر :
🔗 https://laravel.com/docs/10.x/octane
📌@PapiDon_state
👍6❤🔥1
⚙️ Bun 1.0
✨یک ابزار همهکاره برای اجرا، ساخت، آزمون و اشکالزدایی جاوااسکریپت و تایپاسکریپت است، از یک فایل تا یک برنامه کامل.
🔹 هدف اصلی "Bun" حذف کندی و پیچیدگی در توسعه است، بدون اینکه ویژگیهای جاوااسکریپت را نادیده بگیرد.
🔹تا 4 برابر سریعتر از Node.js است و پشتیبانی کاملی از TypeScript و JSX دارد.
🔹 این ابزار دارای پلاگینها، APIهای خاص و یک مدیر بسته سریع است.
🔹 یک باندلکننده و فشردهساز جاوااسکریپت و تایپاسکریپت است.
🔗 https://bun.sh/blog/bun-v1.0
📌@PapiDon_state
✨یک ابزار همهکاره برای اجرا، ساخت، آزمون و اشکالزدایی جاوااسکریپت و تایپاسکریپت است، از یک فایل تا یک برنامه کامل.
🔹 هدف اصلی "Bun" حذف کندی و پیچیدگی در توسعه است، بدون اینکه ویژگیهای جاوااسکریپت را نادیده بگیرد.
🔹تا 4 برابر سریعتر از Node.js است و پشتیبانی کاملی از TypeScript و JSX دارد.
🔹 این ابزار دارای پلاگینها، APIهای خاص و یک مدیر بسته سریع است.
🔹 یک باندلکننده و فشردهساز جاوااسکریپت و تایپاسکریپت است.
🔗 https://bun.sh/blog/bun-v1.0
📌@PapiDon_state
👍3❤1
🚀 آشنایی با متد
متد
✨استفاده از
📌@PapiDon_state
sole در لاراولمتد
sole یک متد کمکی است که هم در کوئری بیلدر و هم در مجموعهها (collections) در لاراول موجود است. وقتی از این متد استفاده میکنید، انتظار دارید که فقط یک نتیجه با شرایط معین دریافت کنید. اگر فقط یک نتیجه باشد، آن را دریافت میکنید، ولی اگر بیش از یک نتیجه یا حتی هیچ نتیجهای وجود نداشته باشد، لاراول یک خطا به شما نمایش میدهد.✨استفاده از
sole در مجموعهها (collections):$collection = collect([1, 2, 3, 4]);در مثال بالا، متد
$item = $collection->filter(function ($value) {
return $value > 3;
})->sole();
filter یک مجموعه با مقدار 4 برمیگرداند. چون تنها یک مقدار با شرط داده شده وجود دارد، متد sole آن مقدار را برمیگرداند. در صورت وجود بیشتر یا کمتر از یک مقدار مطابقت داشته باشد، استثناء رخ میدهد.📌@PapiDon_state
❤11👏5
"It always seems impossible until it's done."
🌟همیشه چیزها غیرممکن به نظر میرسند تا زمانی که انجام شوند.
این جمله به ما یادآور میشود که حتی اگر چیزی دشوار یا غیرممکن به نظر بیاید، با تلاش و پشتکار، میتوان آن را به انجام رساند. بیایید با این انرژی و باور به توانمندیهای خود، روزمان را شروع کنیم.
📌@PapiDon_state
🌟همیشه چیزها غیرممکن به نظر میرسند تا زمانی که انجام شوند.
این جمله به ما یادآور میشود که حتی اگر چیزی دشوار یا غیرممکن به نظر بیاید، با تلاش و پشتکار، میتوان آن را به انجام رساند. بیایید با این انرژی و باور به توانمندیهای خود، روزمان را شروع کنیم.
📌@PapiDon_state
👍8❤1👏1
🚀 maatwebsite/excel in Larave
این پکیج، یک ابزار قدرتمند برای کار با فایلهای Excel در فریمورک لاراول است. این ابزار اجازه میدهد که به آسانی اطلاعات را از یک فایل Excel وارد و یا به آن خروجی دهید.
✨ ویژگیها:
1. وارد کردن اطلاعات با سرعت بالا
2. خروجی با فرمتهای مختلف مانند XLS, XLSX, CSV
3. امکان مپ کردن ستونهای فایل به مدلهای دیتابیس
4. پشتیبانی از معیارها و فیلترهای مختلف
🛠نحوه نصب:
برای نصب این پکیج کافی است دستور زیر را در ترمینال خود اجرا کنید:
📖 مستندات:
https://packagist.org/packages/maatwebsite/excel
📌@PapiDon_state
این پکیج، یک ابزار قدرتمند برای کار با فایلهای Excel در فریمورک لاراول است. این ابزار اجازه میدهد که به آسانی اطلاعات را از یک فایل Excel وارد و یا به آن خروجی دهید.
✨ ویژگیها:
1. وارد کردن اطلاعات با سرعت بالا
2. خروجی با فرمتهای مختلف مانند XLS, XLSX, CSV
3. امکان مپ کردن ستونهای فایل به مدلهای دیتابیس
4. پشتیبانی از معیارها و فیلترهای مختلف
🛠نحوه نصب:
برای نصب این پکیج کافی است دستور زیر را در ترمینال خود اجرا کنید:
composer require maatwebsite/excel📖 مستندات:
https://packagist.org/packages/maatwebsite/excel
📌@PapiDon_state
👍10❤1
🚀 معرفی Pest در لاراول 🚀
آیا تا کنون با Pest آشنا شدهاید؟
🔍 یک ابزار تست نویسی جدید و پویا در لاراول است. با این ابزار، میتوانید تستهای خود را با یک سینتکس زیباتر و سادهتر نوشته و اجرا کنید.
🌟 ویژگیهای کلیدی:
1️⃣ سینتکس ساده و خواندنی: با استفاده از Pest، کدهای تست شما کوتاهتر، خواناتر و بهینهتر خواهد بود.
2️⃣ پشتیبانی از توابع Higher-order و متدهای Chainable : با این ویژگی، تستنویسی به یک تجربه انعطافپذیر و قدرتمند تبدیل میشود.
⚙️ برای استفاده از Pest کافی است از طریق
🔗 مستندات :
https://pestphp.com/
📌@PapiDon_state
آیا تا کنون با Pest آشنا شدهاید؟
🔍 یک ابزار تست نویسی جدید و پویا در لاراول است. با این ابزار، میتوانید تستهای خود را با یک سینتکس زیباتر و سادهتر نوشته و اجرا کنید.
🌟 ویژگیهای کلیدی:
1️⃣ سینتکس ساده و خواندنی: با استفاده از Pest، کدهای تست شما کوتاهتر، خواناتر و بهینهتر خواهد بود.
2️⃣ پشتیبانی از توابع Higher-order و متدهای Chainable : با این ویژگی، تستنویسی به یک تجربه انعطافپذیر و قدرتمند تبدیل میشود.
⚙️ برای استفاده از Pest کافی است از طریق
composer آن را نصب کنید:composer require pestphp/pest --dev🎉 اگر به دنبال بهبود فرآیند تست نویسی خود در لاراول هستید، Pest یک گزینه عالی است!
🔗 مستندات :
https://pestphp.com/
📌@PapiDon_state
👍6❤2👏2
✨استفاده از متد
هر زمان که بخواهید یک کنترلر با تنها یک وظیفه داشته باشید، میتوانید از متد جادویی
🔍 چرا؟
1️⃣ سادگی: نیازی به تعیین نام متد در مسیر ندارید.
2️⃣ خواندنی: کدتان تمیزتر و مستقیمتر میشود.
🌟 مثال:
کنترلر:
مسیر:
اگر از این متد در کنترلر استفاده کنید، نیازی به تعیین نام متد در مسیر (route) ندارید
همین! هر زمان که این مسیر فراخوانی میشود، متد
@PapiDon_state
__invoke در #لاراول هر زمان که بخواهید یک کنترلر با تنها یک وظیفه داشته باشید، میتوانید از متد جادویی
__invoke استفاده کنید!🔍 چرا؟
1️⃣ سادگی: نیازی به تعیین نام متد در مسیر ندارید.
2️⃣ خواندنی: کدتان تمیزتر و مستقیمتر میشود.
🌟 مثال:
کنترلر:
class ShowProfile extends Controller {
public function __invoke($id) {
// code ...
}
}مسیر:
اگر از این متد در کنترلر استفاده کنید، نیازی به تعیین نام متد در مسیر (route) ندارید
Route::get('/user/{id}', ShowProfile::class);همین! هر زمان که این مسیر فراخوانی میشود، متد
__invoke اجرا میشود. 😍@PapiDon_state
👍21❤1
🔍 الگوی (Repository Pattern) در برنامهنویسی چیست؟
📚 فرض کنید میخواهید یک کتاب از کتابخانه بیرون بیاورید:
1️⃣ اگر مستقیما وارد انبار کتابها شوید و شروع به جستجو کنید، زمان زیادی میبرد، گم میشوید و حتی ممکن است به دسترسی اطلاعات نادرست یا مناسبی نرسیده باشید.
2️⃣ اما، وقتی به میز اطلاعات مراجعه میکنید و از کتابدار کمک میخواهید، او به سرعت میتواند کتاب مورد نظر شما را پیدا و به شما بدهد.
در این مثال:
🔹کتابدار: همان "Repository" است. او میداند که هر کتاب کجا قرار دارد و چگونه باید به آن دسترسی پیدا کرد.
🔹انبار کتابها: به منابع داده اطلاعاتی (مثل پایگاههای داده یا APIها) اشاره دارد.
✨ زمانی که در برنامهنویسی از الگوی "Repository Pattern" استفاده میکنیم، به جای اینکه مستقیماً به منبع داده مراجعه کنیم، با استفاده از یک "Repository" به دادهها دسترسی پیدا میکنیم. این رویکرد باعث میشود کد برنامهی ما تمیزتر، قابل فهمتر و قابل تستتر باشد.
📌@PapiDon_state
📚 فرض کنید میخواهید یک کتاب از کتابخانه بیرون بیاورید:
1️⃣ اگر مستقیما وارد انبار کتابها شوید و شروع به جستجو کنید، زمان زیادی میبرد، گم میشوید و حتی ممکن است به دسترسی اطلاعات نادرست یا مناسبی نرسیده باشید.
2️⃣ اما، وقتی به میز اطلاعات مراجعه میکنید و از کتابدار کمک میخواهید، او به سرعت میتواند کتاب مورد نظر شما را پیدا و به شما بدهد.
در این مثال:
🔹کتابدار: همان "Repository" است. او میداند که هر کتاب کجا قرار دارد و چگونه باید به آن دسترسی پیدا کرد.
🔹انبار کتابها: به منابع داده اطلاعاتی (مثل پایگاههای داده یا APIها) اشاره دارد.
✨ زمانی که در برنامهنویسی از الگوی "Repository Pattern" استفاده میکنیم، به جای اینکه مستقیماً به منبع داده مراجعه کنیم، با استفاده از یک "Repository" به دادهها دسترسی پیدا میکنیم. این رویکرد باعث میشود کد برنامهی ما تمیزتر، قابل فهمتر و قابل تستتر باشد.
📌@PapiDon_state
🔥10❤🔥2❤1👍1🙏1
✨ فرض کنید میخواهید از یک پایگاه داده لیستی از کتابها را دریافت کنید. بدون استفاده از الگوی Repository، ممکن است مستقیماً در کنترلر خود از مدل استفاده کنید:
بدون استفاده از Repository:
BookRepository.php
1️⃣ کد شما تمیزتر و منظمتر میشود.
2️⃣ اگر روزی تصمیم به تغییر منبع داده (مثل استفاده از یک API به جای پایگاه داده) بگیرید، فقط باید مخزن مربوطه را تغییر دهید و نیازی به تغییر کنترلرها ندارید.
3️⃣ تستها نیز آسانتر انجام میشوند. شما میتوانید برای مخزن یک mock ایجاد کرده و از آن در تستها استفاده کنید.
⚙️این فقط یک مثال ساده بود. در پروژههای واقعی، الگوی Repository میتواند بسیار پیچیدهتر و قدرتمندتر باشد.
⚠️در لاراول به صورت پیش فرض دستوری برای ایجاد یک "Repository" وجود ندارد. اما شما میتوانید به صورت دستی خودتان فایلها را ایجاد کنید.
برای ایجاد یک "Repository" به صورت دستی:
1️⃣ ابتدا یک پوشه با نام "Repositories" در داخل پوشه "app" ایجاد کنید.
2️⃣درون این پوشه، یک فایل با نام Repositorie خود، مانند "BookRepository.php"، ایجاد کنید.
📌@PapiDon_state
بدون استفاده از Repository:
namespace App\Http\Controllers;اما با استفاده از الگوی Repository، شما یک مخزن برای کتابها میسازید:
use App\Models\Book;
use Illuminate\Http\Request;
class BookController extends Controller
{
public function index()
{
$books = Book::all();
return view('books.index', compact('books'));
}
}
BookRepository.php
namespace App\Repositories;حالا، در کنترلر خود، از این مخزن استفاده میکنید:
use App\Models\Book;
class BookRepository
{
protected $book;
public function __construct(Book $book)
{
$this->book = $book;
}
public function all()
{
return $this->book->all();
}
}
namespace App\Http\Controllers;با استفاده از این رویکرد:
use App\Repositories\BookRepository;
use Illuminate\Http\Request;
class BookController extends Controller
{
protected $bookRepository;
public function __construct(BookRepository $bookRepository)
{
$this->bookRepository = $bookRepository;
}
public function index()
{
$books = $this->bookRepository->all();
return view('books.index', compact('books'));
}
}
1️⃣ کد شما تمیزتر و منظمتر میشود.
2️⃣ اگر روزی تصمیم به تغییر منبع داده (مثل استفاده از یک API به جای پایگاه داده) بگیرید، فقط باید مخزن مربوطه را تغییر دهید و نیازی به تغییر کنترلرها ندارید.
3️⃣ تستها نیز آسانتر انجام میشوند. شما میتوانید برای مخزن یک mock ایجاد کرده و از آن در تستها استفاده کنید.
⚙️این فقط یک مثال ساده بود. در پروژههای واقعی، الگوی Repository میتواند بسیار پیچیدهتر و قدرتمندتر باشد.
⚠️در لاراول به صورت پیش فرض دستوری برای ایجاد یک "Repository" وجود ندارد. اما شما میتوانید به صورت دستی خودتان فایلها را ایجاد کنید.
برای ایجاد یک "Repository" به صورت دستی:
1️⃣ ابتدا یک پوشه با نام "Repositories" در داخل پوشه "app" ایجاد کنید.
2️⃣درون این پوشه، یک فایل با نام Repositorie خود، مانند "BookRepository.php"، ایجاد کنید.
📌@PapiDon_state
👍12❤1👏1🙏1
اگر تو نخواهی یاد بگیری، هیچ کس نمیتواند به تو کمک کند. اگر تو به یادگیری مصمم باشی، هیچ کس نمیتواند مانع تو باشد.
💪 @PapiDon_state
💪 @PapiDon_state
👍10❤6👏1👌1