کانال آموزشی لاراول
3.06K subscribers
120 photos
4 videos
38 links
📌 کانال اتاق برنامه نویسی
@PapiDon_coding
Download Telegram
🚀 Batch Actions در لاراول 🚀

Batch Actions چیست؟
گاهی اوقات ممکن است بخواهید یک سری عملیات را بصورت گروهی بر روی چندین سطر از دیتابیس انجام دهید. به عبارت دیگر، به جای انجام یک عملیات بر روی هر سطر به طور جداگانه، می‌خواهید چند سطر را انتخاب کنید و یک عملیات مشخص را بر روی آن‌ها به صورت همزمان اجرا کنید. این قابلیت در لاراول با نام Batch Actions قابل استفاده است.

🔧 چگونه از آن استفاده کنیم؟
برای استفاده از Batch Actions در لاراول، شما باید از متدهای موجود در کلاس Builder استفاده کنید. با استفاده از این متدها، می‌توانید عملیات مورد نظر خود را بر روی چندین مدل به طور همزمان اجرا کنید.

🌐 مثال:
فرض کنید می‌خواهید چندین کاربر را به طور همزمان حذف کنید - در تصویر ضمیمه شده، نمایش داده شده است

#PapiDon
👍52
🔥 Custom Casts in Laravel 🔥

Custom Casts چیست؟
در لاراول، می‌توانیم با استفاده از Casts مقادیر خاصی از دیتابیس را به فرمت‌های مورد نظر تبدیل کنیم. مانند تبدیل یک رشته به آرایه یا جیسون. Custom Casts امکان ایجاد تبدیل‌های سفارشی را به ما می‌دهد.

🛠 چگونه از آن استفاده کنیم؟

ابتدا یک کلاس Cast سفارشی ایجاد می‌کنیم.
این کلاس باید دو متد get و set داشته باشد.
سپس در مدل خود، از این Cast استفاده می‌کنیم.

🌐 مثال ساده:
فرض کنید می‌خواهیم مقادیر یک ستون را به صورت معکوس ذخیره و بازیابی کنیم. در تصویر ضمیمه شده است.

// استفاده در مدل:
protected $casts = [
'column_name' => ReverseString::class,
];

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

#PapiDon
👍82
🔄 Every setback is a setup for a comeback.

📝 هر پس‌رفت، آماده‌سازی برای بازگشت قوی‌تر است.

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

در هر پس‌رفتی، فرصتی نهان برای یادگیری و تجربه است. بازگشت با قوت بیشتر فقط یک قدم دور است.

🔝💪🚀

#PapiDon
👍63🔥1👏1
🎨 معرفی Atomic CSS!

🔍 Atomic CSS چیست؟
در "Atomic CSS"، هر کلاس CSS فقط یک ویژگی استایل را اعمال می‌کند. این روش مانند فانکشن‌های کوچک و تک‌وظیفه‌ای در برنامه‌نویسی عمل می‌کند.

🌟 مزایا:
1️⃣ قابلیت استفاده مجدد و سریع.
2️⃣ حجم کمتر CSS.
3️⃣ تغییرات ساده و بدون دردسر.

❗️ معایب:
1️⃣ قرائت پایین HTML به دلیل استفاده از کلاس‌های زیاد.
2️⃣ نیاز به یادگیری و فهم کلاس‌ها.
3️⃣ تفاوت با سایر رویکردهای استایل‌دهی.

🛠 ابزار معروف با این رویکرد:
Tailwind CSS

در کل، Atomic CSS یک رویکرد جذاب برای طراحی وب است، اما ممکن است برای هر پروژه یا تیم مناسب نباشد.

#PapiDon
🔥42👌2👍1🎉1
🌐 معرفی Rate Limiting در لاراول 🌐

دوستان عزیز، امروز قصد داریم درباره‌ی یکی از ویژگی‌های بسیار مفید و امنیتی لاراول صحبت کنیم: Rate Limiting در مسیریابی!

🔒 What is Rate Limiting ?

Rate Limiting به شما اجازه می‌دهد تا تعداد درخواست‌هایی که به یک مسیر خاص در بازه زمانی معین می‌تواند ارسال شود، را محدود کنید.

🚀 چرا این ویژگی مهم است؟
جلوگیری از حملات از نوع DDoS
حفاظت از منابع سرور
ارائه خدمات به‌طور منصفانه به همه کاربران

🛠 چگونه در لاراول از آن استفاده کنیم؟
با استفاده از میدلویر throttle می‌توانید Rate Limiting را اعمال کنید:

Route::middleware(['throttle:60,1'])->group(function () {
Route::get('/endpoint', 'Controller@method');
});

در این مثال، کاربر تنها اجازه دارد تا 60 درخواست در هر دقیقه به مسیر /endpoint ارسال کند.

📖 پیشرفته‌تر!
لاراول امکانات پیشرفته‌ای نیز برای Rate Limiting دارد، از جمله تعریف سفارشی Rate Limiters.


#PapiDon
👍15🔥4
🔍 دستور firstWhere

اگر تا به حال با دستور where در Eloquent کار کرده‌اید، firstWhere را هم حتما دوست خواهید داشت. این دستور، روش سریع و ساده‌ای برای جستجو و دریافت اولین مدل است که با یک زوج مقدار-کلید مطابقت می‌کند.

📌 چگونه استفاده کنیم؟

$user = User::firstWhere('name', 'John Doe');

در مثال بالا، به راحتی و با یک خط کد، اولین کاربر با نام "John Doe" را جستجو و دریافت کردیم.


🔗 اگر به دنبال استفاده از عملگرها هستید، همچنان ساده است:

$user = User::firstWhere('age', '>=', 18);


🔺 نکته مهم: اگرچه firstWhere بسیار مفید و سریع است، ولی برای پیچیدگی‌های بیشتر، همچنان پیشنهاد می‌شود از دستور where استفاده کنید.


#PapiDon
👍3👌3🙏1
کانال آموزشی لاراول
🔍 دستور firstWhere اگر تا به حال با دستور where در Eloquent کار کرده‌اید، firstWhere را هم حتما دوست خواهید داشت. این دستور، روش سریع و ساده‌ای برای جستجو و دریافت اولین مدل است که با یک زوج مقدار-کلید مطابقت می‌کند. 📌 چگونه استفاده کنیم؟ $user = User:…
🔺 نکته مهم:

دستور firstWhere به شما امکان می‌دهد که به سرعت و با استفاده از کد کمتر اولین موردی که با شرط مورد نظر شما مطابقت دارد را پیدا کنید. اما این دستور تنها برای شرایط ساده و محدود طراحی شده است.

در مقابل، where یک دستور بسیار قوی‌تر است که اجازه می‌دهد تا با استفاده از شرایط متعدد و پیچیده‌تر، جستجوهایی دقیق‌تر انجام دهید. بعضی از دلایل استفاده از where به جای firstWhere در موارد پیچیده‌تر عبارت‌اند از:

1️⃣. شرایط متعدد : با where شما می‌توانید تعداد نامحدودی شرط را اضافه کنید و از ترکیب‌های مختلفی مانند orWhere, whereIn, و غیره استفاده کنید.

2️⃣. عملیات‌های پیچیده‌تر : where امکان استفاده از توابع پایگاه داده و عملیات‌های متنوع‌تری را فراهم می‌آورد.

3️⃣. ترکیب با دستورات دیگر : اگر بخواهید شرایطی را با groupBy, having, orderBy و سایر دستورات ترکیب کنید، استفاده از where مناسب‌تر است.

4️⃣. گرفتن نتایج متعدد : firstWhere تنها یک نتیجه را بر می‌گرداند، در حالی که با استفاده از where و ترکیب آن با get یا `paginate`، شما می‌توانید یک مجموعه از نتایج را بازیابی کنید.

به همین دلیل، اگر شما به دنبال انجام یک جستجوی ساده و سریع هستید، firstWhere می‌تواند گزینه خوبی باشد.
👍42
🔒محافظت از متغیرهای env در Laravel

وقتی در حال توسعه یک برنامه با Laravel هستید و APP_DEBUG برابر با true قرار دارد، خطاها واقعا مفید هستند. اما چطور می‌توانیم از نمایش متغیرهای حساس env در این خطاها جلوگیری کنیم؟

📌 گام‌های عملیاتی:

1️⃣. فایل app/Exceptions/Handler.php را باز کنید.

2️⃣. در متد register، خط زیر را اضافه کنید:


$this->withoutExpose(['DB_PASSWORD', 'DB_USERNAME', 'ANOTHER_SENSITIVE_KEY']);


📝 نکته: در اینجا، DB_PASSWORD, DB_USERNAME, و ANOTHER_SENSITIVE_KEY نمونه‌هایی از متغیرهایی هستند که ممکن است بخواهید مخفی کنید. شما می‌توانید هر متغیر env دیگری که مایل به محافظت از آن هستید را نیز به لیست اضافه کنید.

🚫 همیشه توصیه می‌شود که در محیط تولید، APP_DEBUG را بر روی false قرار دهید تا از نمایش هر گونه اطلاعات حساس به کاربران جلوگیری شود.


#PapiDon
7👍3👌1
🔍 آشنایی با whereHas در لاراول

در لاراول، هنگام کار با ارتباط‌های مدل‌ها ممکن است نیاز پیدا کنید تا کوئری‌هایی اجرا کنید که بر اساس وجود یا عدم وجود رکوردهای مرتبط در یک ارتباط تصمیم بگیرد. whereHas در اینجا به کمک می‌آید.

📌 چگونه کار می‌کند؟
فرض کنید دو مدل داریم: User و Post. هر کاربر می‌تواند چندین پست داشته باشد. حالا فرض کنید می‌خواهید تمام کاربرانی را پیدا کنید که حداقل یک پست دارند. در اینجا whereHas می‌تواند مفید باشد:

$usersWithPosts = User::whereHas('posts')->get();


🔗 پیشرفته‌تر:
شما همچنین می‌توانید شرط‌هایی به whereHas اضافه کنید تا بر اساس ویژگی‌هایی از مدل‌های مرتبط فیلتر کنید:

$usersWithPopularPosts = User::whereHas('posts', function($query) {
$query->where('views', '>', 1000);
})->get();


📚 در این مثال، فقط کاربرانی که پست‌هایی با بیش از 1000 بازدید دارند، بازگردانده می‌شوند.


#PapiDon
👍83
🔍 آشنایی با flatMap در لاراول

در لاراول، وقتی با مجموعه‌ها (collections) کار می‌کنید، بعضی وقت‌ها نیاز دارید تا تغییراتی را روی آن‌ها اعمال کنید و در نهایت یک مجموعه جدید و یکپارچه بسازید. flatMap همان کمک‌رسان شما در این زمینه است.

📌 چگونه کار می‌کند؟

فرض کنید شما یک مجموعه از کاربران دارید و هر کاربر چندین شماره تلفن. با استفاده از flatMap ، شما می‌توانید یک مجموعه یکپارچه از شماره‌های تلفن بسازید:

$users = collect([
['name' => 'Ali', 'phones' => ['09120000000', '09121111111']],
['name' => 'Reza', 'phones' => ['09122222222']]
]);

$phones = $users->flatMap(function ($user) {
return $user['phones'];
});

// نتیجه: ['09120000000', '09121111111', '09122222222']


🔗 تفاوت با map:
تفاوت اصلی flatMap با map این است که flatMap مجموعه‌های میانی را حذف می‌کند و یک مجموعه یکپارچه و یکسان ایجاد می‌کند.


#PapiDon
🔥10👍3👏21
🔍 شناسایی افزونه‌های مشکل‌ساز در VSCode

سلام دوستان 👋
اگر از کاربران Visual Studio Code هستید، قطعا تا به حال با این موضوع مواجه شده‌اید که بعد از نصب یک افزونه یا به‌روزرسانی، برخی مواقع سرعت کار با ویرایشگر شما تحت تأثیر قرار می‌گیرد. اما چطور می‌توانیم بفهمیم کدام افزونه مشکل دارد؟

با دستور Start Extension Bisect میتوانیم به سادگی مشکل‌ساز را شناسایی کنیم.

🔹 چطور این کار را انجام دهیم؟

1️⃣. باز کردن VSCode.
2️⃣. فشردن Ctrl + Shift + P (ویندوز یا Linux) یا Cmd + Shift + P (مک).
3️⃣. تایپ Start Extension Bisect و انتخاب آن.
4️⃣. دنبال کردن دستورالعمل‌ها و مشاهده نتیجه!

خیلی هم ساده، در کمتر از چند دقیقه می‌توانید مشکل‌ساز را پیدا و غیرفعال کنید. 😊


#PapiDon
👍4👏1
کانال آموزشی لاراول
🔍 شناسایی افزونه‌های مشکل‌ساز در VSCode سلام دوستان 👋 اگر از کاربران Visual Studio Code هستید، قطعا تا به حال با این موضوع مواجه شده‌اید که بعد از نصب یک افزونه یا به‌روزرسانی، برخی مواقع سرعت کار با ویرایشگر شما تحت تأثیر قرار می‌گیرد. اما چطور می‌توانیم…
🛠 دستور Start Extension Bisect در Visual Studio Code یک ویژگی است که به شما کمک می‌کند تا مشکلات و مشکل‌سازهای مرتبط با افزونه‌ها را پیدا کنید. اگر شما احساس می‌کنید که پس از نصب یک افزونه یا به‌روزرسانی یکی از افزونه‌ها، VSCode به شکل نامناسبی عمل می‌کند، با استفاده از این ویژگی می‌توانید مشکل‌ساز را شناسایی کنید.

وقتی دستور Start Extension Bisect را اجرا می‌کنید، VSCode به شکل تکراری نصف کردن (bisect) افزونه‌ها را غیرفعال می‌کند تا بفهمد کدام افزونه باعث مشکل می‌شود. این روش بر مبنای الگوریتم باینری سرچ (binary search) است.

روند کار به این شکل است:

1️⃣. نصف افزونه‌ها را غیرفعال می‌کند.
2️⃣. از شما می‌پرسد که آیا مشکل همچنان وجود دارد یا خیر.
3️⃣. بر اساس پاسخ شما، VSCode تصمیم می‌گیرد که کدام نصف از افزونه‌ها را بررسی کند.
4️⃣. این فرآیند ادامه پیدا می‌کند تا مشکل‌ساز پیدا شود.

پس از پیدا کردن افزونه‌ای که مشکل را ایجاد می‌کند، شما می‌توانید آن را حذف یا غیرفعال کنید.
🙏4👍1💯1
🚀 ویژگی setVisible در لاراول

در مدل‌های Eloquent لاراول، گاهی می‌خواهیم تصمیم بگیریم که هنگام تبدیل مدل به JSON یا آرایه، کدام ویژگی‌ها یا ستون‌ها نمایش داده شوند. برای این کار، از setVisible استفاده می‌کنیم.

🔍 مثال:
$user = App\Models\User::first();
$user->setVisible(['first_name', 'last_name']);

با استفاده از کد بالا، فقط first_name و last_name کاربر در خروجی نمایش داده می‌شود.

🔐 توجه: این ویژگی تنها برای کنترل نمایش اطلاعات استفاده می‌شود و نباید به عنوان یک راه‌کار امنیتی محض در نظر گرفته شود.

#PapiDon
5👍2🎉1
کانال آموزشی لاراول
🚀 ویژگی setVisible در لاراول در مدل‌های Eloquent لاراول، گاهی می‌خواهیم تصمیم بگیریم که هنگام تبدیل مدل به JSON یا آرایه، کدام ویژگی‌ها یا ستون‌ها نمایش داده شوند. برای این کار، از setVisible استفاده می‌کنیم. 🔍 مثال: $user = App\Models\User::first(); $user…
🔒 ویژگی setHidden در لاراول

در مدل‌های Eloquent لاراول، مواقعی وجود دارد که می‌خواهیم بعضی از ویژگی‌ها یا ستون‌ها را هنگام تبدیل مدل به JSON یا آرایه، مخفی کنیم. برای این منظور، از setHidden استفاده می‌کنیم.


🔎 مثال:
$user = App\Models\User::first();
$user->setHidden(['password', 'remember_token']);


در این مثال، ویژگی‌های password و remember_token کاربر در خروجی نمایش داده نخواهد شد.

📌 یادآوری: استفاده از setHidden فقط برای مدیریت ویژگی‌هایی که در خروجی نمایش داده نمی‌شوند مناسب است و نباید به عنوان یک ابزار امنیتی به حساب آید.

#PapiDon
👍61
🔥Singleton Resource in Laravel 🔥

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

لاراول با ارائه Route::singleton به شما این امکان را می‌دهد که مسیرهای مخصوص به یک منبع تک‌نمونه را تعریف کنید:

Route::singleton('profile', ProfileController::class);

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

پیشنهاد می‌کنم حتما این ویژگی مفید را در پروژه‌های خود امتحان کنید! 🚀

#PapiDon
👍10🔥1👏1
🖋 مفهوم Declarative و Imperative در برنامه‌نویسی 🖋

⚙️ برنامه‌نویسی فرمانی (Imperative):

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

📌 مثال:
let total = 0;
for(let i=0; i<array.length; i++) {
total += array[i];
}

💻 برنامه‌نویسی اعلامی (Declarative):

- در اینجا، ما فقط مشخص می‌کنیم چه چیزی را می‌خواهیم و سیستم خودش تصمیم می‌گیرد چگونه آن را انجام دهد.
- تاکید بر نتیجه نهایی است، نه روی روند اجرایی.

📌 مثال:

const total = array.reduce((acc, val) => acc + val, 0);

🔍 ریکت و لاراول جز کدام هستند؟

- ریکت (React): این کتابخانه جاوااسکریپت اعلامی است. شما فقط توصیف می‌کنید چگونه UI در وضعیت معینی باید باشد و ریکت مسئول به‌روز رسانی است.

- لاراول (Laravel): چارچوب برنامه‌نویسی PHP که در بسیاری از جنبه‌هایش اعلامی است، ولی همچنان می‌تواند در برخی قسمت‌ها فرمانی باشد.


#PapiDon
8👍2👏2
🚀 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;
👍133
🌟 Your biggest risk isn't failing, it's getting too comfortable 🌟

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

به جلو بروید، چون راحتی موقتی است، اما یادگیری و رشد، برای همیشه.


#PapiDon
9👍2🔥1👏1
🚀 map() with Collection

استفاده از متد ()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 و همگامی بهتر بین لایووایر و آلپاین خواهد شد.
👍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();


📜 این کد، کاربرانی را می‌یابد که نام و نام خانوادگی یکسان دارند و تاریخ ایجاد قبل از تاریخ بروزرسانی است.
👍141