TGViewer
Channel Public Channel
| کانال توسعه‌دهندگان لاراول |

| کانال توسعه‌دهندگان لاراول |

@developixlaravel

⭕️ کانال توسعه‌دهندگان لاراول دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Subscribers
1.54K
Photos
86
Videos
0
Links
141
Recent Posts 20 shown
Post #202 304
روابط پایگاه داده چند ریختی یا Eloquent Polymorphic در لاراول - قسمت اول

در لاراول، روابط چندریختی (Eloquent Polymorphic Relationships) یکی از ویژگی‌های قدرتمند ORM است که اجازه می‌دهد یک مدل با چند مدل دیگر از نوع‌های متفاوت، از طریق یک رابطه مشترک، ارتباط برقرار کند. این مفهوم به جای ساخت چند جدول واسط متفاوت، از یک جدول یکتا برای نگهداری شناسه و نوع مدل مرتبط استفاده می‌کند. مثلاً جدول نظرات (comments) می‌تواند هم به پست‌ها و هم به ویدیوها تعلق داشته باشد، بدون نیاز به تعریف چند رابطه مجزا. در این قسمت، ابتدا منطق کار و ساختار پایگاه داده روابط چندریختی را بررسی می‌کنیم و سپس مراحل تعریف مدل‌ها و کلیدهای ارتباطی را توضیح می‌دهیم تا درک دقیقی از این ساختار انعطاف‌پذیر در Eloquent ایجاد شود.

https://www.aparat.com/v/lonzgac

🔖 #Laravel #PHP #لاراول

👤 ابوالفضل

💎 Channel: @DevelopixLaravel
  • 👍 3
  • ❤ 2
Post #201 260
مدیریت همزمانی و قفل‌گذاری روی پردازش‌ها در لاراول (Laravel Atomic Locks)

در بخش چهارم از این مجموعه آموزشی، به بررسی نحوه استفاده از Atomic Lockها در فریم‌ورک لاراول جهت جلوگیری از اجرای همزمان پردازش‌های حساس و مدیریت بهینه Race Condition پرداخته شده است.

برای مشاهده کامل ویدیو، از لینک زیر استفاده کنید:

https://www.aparat.com/v/jaw0nx0

🔖 #Laravel #PHP #لاراول

👤 ابوالفضل

💎 Channel: @DevelopixLaravel
  • 👍 5
Post #200 393
🔥 پکیج: ورود با حساب‌های دیگر؛ Socialite

برای اضافه‌کردن ورود با حساب‌های دیگر به پروژه لاراولی، Socialite مسیر سرراستی است. این پکیج، کتابخانه‌های OAuth 1 و OAuth 2 را در قالبی سازگار با لاراول در اختیارت می‌گذارد و کارِ هدایت کاربر به سرویس‌دهنده و دریافت اطلاعات او پس از بازگشت را ساده‌تر می‌کند.

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

📥 دانلود: 123,728,494
⭐️ 5,837 علاقه‌مند

🔖 #Laravel #PHP #لاراول #لاراول #Socialite

💎 @DevelopixLaravel
  • ❤ 5
  • 👍 1
Post #199 352
🔒 فقط داده‌های تأییدشده را ذخیره کن

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

در لاراول، برای چنین فرم‌هایی از FormRequest استفاده کن و موقع ذخیره فقط خروجی validated() را بگیر. این متد فقط فیلدهایی را برمی‌گرداند که در قوانین اعتبارسنجی تعریف شده‌اند؛ بنابراین فیلد اضافی درخواست وارد این آرایه نمی‌شود. 👇

$data = $request->validated();
$user->update($data);


این نمونه فرض می‌کند $request یک FormRequest است و در متد rules() آن فقط فیلدهای قابل‌ویرایش، مثل name، تعریف شده‌اند. برای امنیت بیشتر، تنظیمات fillable مدل را هم محدود نگه دار؛ اعتبارسنجی جای محافظت در برابر Mass Assignment را نمی‌گیرد.

✨ دفعه‌ی بعد که یک فرم ویرایش می‌سازی، مسیر داده از درخواست تا update() را بررسی کن و این الگو را امتحان کن.

📚 مستندات رسمی لاراول: داده‌های اعتبارسنجی‌شده

🔖 #Laravel #PHP #لاراول #Laravel #FormRequest #Validation #MassAssignment

👤 Developix

💎 Channel: @DevelopixLaravel
  • 👍 4
Post #198 447
حفاظت از پردازش ها با Laravel Rate Limiter بخش سوم - پیکربندی

در قسمت سوم از مجموعه آموزش حفاظت از پردازش‌ها در لاراول، به سراغ نحوه پیکربندی اصولی Rate Limiter می‌رویم. تنظیم محدودیت نرخ درخواست‌ها یا Rate Limiting یکی از موثرترین راهکارها برای جلوگیری از سوءاستفاده، حملات بروت فورس و کنترل بار کاری روی پردازش‌های پس‌زمینه و صف‌ها در فریم‌ورک لاراول است.

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

https://www.aparat.com/v/rgb7ohp

🔖 #Laravel #PHP #لاراول

👤 ابوالفضل

💎 Channel: @DevelopixLaravel
  • 👍 5
Post #197 428

Forwarded from | کانال ربات تلگرام |

🚀 ‏LaraGram Brain منتشر شد!

از این به بعد برای ساخت ربات‌های تلگرام با فریم‌ورک LaraGram، لازم نیست حتماً خودتون دست به کد بشید؛ یا حتی با توسعه ربات تلگرامی آشنا باشید!

کافیه ایده و توضیحات پروژه‌ای که می‌خواید رو به یک ایجنت هوش‌مصنوعی بدید و باقی کار رو به خودش بسپارید. 🤖

‏LaraGram Brain یک MCP Server برای فریم‌ورک LaraGram هست که مجموعه‌ای از ابزارها و اسکیل‌ها رو در اختیار ایجنت‌های هوش‌مصنوعی قرار می‌ده تا بتونن پروژه رو بهتر بشناسن، پیاده‌سازی کنن، تست بگیرن و حتی مشکلاتش رو بررسی کنن.

از جمله امکاناتش:
• اجرای متدهای تلگرام در محیط Sandbox بدون ارسال واقعی
• دسترسی به Schema و مستندات Telegram
• بررسی ساختار و Queryهای دیتابیس
• مشاهده Logهای برنامه
• جست‌وجو در مستندات LaraGram
•‏ Skillهای مربوط به Bot، MTProto، TMA و Web Pages

فرقی نمی‌کنه پروژه‌تون یه ربات ساده باشه یا یک پروژه پیچیده با MTProto و TMA؛ توضیحاتش رو به ایجنت بدید و اجازه بدید کار رو خودش انجام بده.

لینک پروژه‌ها:
🧩 LaraGram
🧩 Brain

🔖 #TelegramBot #ربات #تلگرام

💎 Channel: @DevelopixRobot
  • ❤ 6
Post #196 597
حفاظت از پردازش‌ها با Laravel Rate Limiter (متد attempt)

در این ویدیو به بررسی نحوه مدیریت نرخ درخواست‌ها و اعمال محدودیت روی توابع یا بلوک‌های اجرایی کد با استفاده از متد RateLimiter::attempt در فریم‌ورک لاراول پرداخته شده است.

برای مشاهده کامل ویدیو، از لینک زیر استفاده کنید:

https://www.aparat.com/v/irg190v

🔖 #Laravel #PHP #لاراول

👤 ابوالفضل

💎 Channel: @DevelopixLaravel
  • 👍 2
Post #195 608
این کد یه دستور کنسول لاراوله که قراره هر ۵ ثانیه یه‌بار یه کار انجام بده. اما توی سرور واقعی، بعد از چند ساعت رم می‌ترکه و پروسه می‌میره.

به نظرت مشکل این کد کجاست و چطور درستش می‌کنی؟

🔖 #Laravel #PHP #لاراول

👤 Developix

💎 Channel: @DevelopixLaravel
  • 👍 3
  • 🔥 1
Post #194 915
حفاظت از پردازش ها با Laravel Rate Limiter بخش اول - معرفی

در این ویدیو به بررسی مفهوم Rate Limiting در فریم‌ورک لاراول، نحوه جلوگیری از حملات Brute Force و فشار بیش از حد بر سرور، و همچنین کاربردهای عملی آن در مدیریت درخواست‌ها و APIها پرداخته شده است.

برای مشاهده کامل ویدیو، از لینک زیر استفاده کنید:

https://www.aparat.com/v/aotg9e4

🔖 #Laravel #PHP #لاراول

👤 ابوالفضل

💎 Channel: @DevelopixLaravel
  • 👍 3
Post #193 616
🔥 پکیج: اینرشیا لاراول (Inertia.js)

کتابخانه Inertia.js با این آداپتور رسماً توی لاراول خانه‌به‌دو‌ش نمی‌ماند 😄

با پکیج Inertia Laravel می‌شود SPA ساخت، بدون این‌که API جدا با JSON و نسخه‌بندی بسازی؛ همان کنترلرهای Blade را نگه می‌داری، فقط خروجی را به کامپوننت‌های Vue / React / Svelte وصل می‌کنی.

امکاناتی مثل shared props، partial reload و lazy props هم آماده است.

برای جزئیات بیشتر و نصب:
مستندات پکیج را ببین و در پروژه بعدی امتحانش کن 🚀

📥 دانلود: 73,092,315
⭐️ 2,479 علاقه‌مند

🔖 #Laravel #PHP #لاراول #لاراول #Inertia_js

💎 @DevelopixLaravel
  • 🔥 5
Post #192 711
‏در خیلی از پروژه‌های لاراول، منطق اعتبارسنجی مستقیم داخل کنترلر نوشته می‌شود و کم‌کم کنترلر تبدیل به یک هیولای چندصد خطی می‌شود 😅

یکی از تمیزترین راه‌ها در معماری لاراول استفاده از Form Request برای جدا کردن منطق Validation است.

🧩 Form Request چیست؟
کلاسی است که از Illuminate\Foundation\Http\FormRequest ارث‌بری می‌کند و تمام قوانین اعتبارسنجی، مجوزها و گاهی پیام‌های خطا را در خودش نگه می‌دهد.

🎯 مزایا:
• کنترلرهای کوتاه و خوانا ✨
• قابلیت تست‌پذیری بهتر
• استفادهٔ مجدد از قوانین بین چند اکشن
• جداسازی واضح لایهٔ HTTP از بیزینس‌لاگیک

✅ مثال قبل و بعد
نمونهٔ کنترلر شلوغ:
public function store(Request $request)
{
$data = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email',
'password' => 'required|min:8',
]);

User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);

return redirect()->route('users.index');
}


حالا همان منطق با Form Request تمیزتر می‌شود 👇

۱️⃣ ساخت Form Request
php artisan make:request StoreUserRequest


فایل ساخته‌شده را در مسیر app/Http/Requests/StoreUserRequest.php ویرایش کن:
class StoreUserRequest extends FormRequest
{
public function authorize(): bool
{
return true; // یا چک‌های policy/permission
}

public function rules(): array
{
return [
'name' => ['required', 'string', 'max:255'],
'email' => ['required', 'email', 'unique:users,email'],
'password' => ['required', 'string', 'min:8'],
];
}
}


۲️⃣ ساده‌سازی کنترلر
حالا کنترلر فقط ورودی تمیز را تحویل می‌گیرد:
public function store(StoreUserRequest $request)
{
$data = $request->validated();

User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);

return redirect()->route('users.index');
}


👌 چند نکتهٔ کاربردی
• برای API می‌توان از متد failedValidation در Form Request برای برگرداندن JSON استاندارد استفاده کرد.
• قوانین مشترک بین چند فرم را می‌توان در یک Form Request پایه قرار داد و بقیه را از آن ارث‌بری داد.
• پیام‌های خطای سفارشی را داخل متد messages تعریف کن تا متن خطاها از کنترلر جدا بماند.

برای جزئیات بیشتر، مستندات رسمی لاراول منبع خیلی خوبی است:
لینک مستندات Form Request

در پروژهٔ بعدی، فقط یک بار Form Request را راه بینداز؛ بعد از آن سخت می‌شود دوباره به کنترلرهای شلوغ برگردی 🚀

🔖 #Laravel #PHP #لاراول #Laravel #Form_Request #Validation #Clean_Code #PHP

👤 Developix

💎 Channel: @DevelopixLaravel
  • ❤ 8
Post #191 818
‏
سوال چالش‌برانگیز لاراول (خروجی Collection):

خروجی اجرای این کد در لاراول چیست؟

جواب را دقیقا همان‌طور که در خروجی نهایی چاپ می‌شود بنویسید (شامل ساختار آرایه/JSON).

🔖 #Laravel #PHP #لاراول

👤 Developix

💎 Channel: @DevelopixLaravel
  • 👍 4
  • 👎 1
Post #190 921
خروجی این کد Laravel چیست؟

در نظر بگیرید روی یک پروژه Laravel دارید کار می‌کنید و از Collection برای دستکاری داده‌ها استفاده کرده‌اید. در کد زیر از ترکیب pluck، collapse و values استفاده شده است.

به‌دقت به نوع داده‌ای که هر مرحله برمی‌گرداند توجه کنید و بگویید در انتها چه چیزی روی صفحه چاپ می‌شود.

سؤال:
خروجی نهایی اجرای این اسکریپت PHP چیست؟ (دقیقاً همان رشته‌ای که echo چاپ می‌کند را بنویسید)

🔖 #Laravel #PHP #لاراول

👤 Developix

💎 Channel: @DevelopixLaravel
  • 👍 4
Post #189 916

Forwarded from Developix Support

با Migration Boost هاست‌ایران، برای مهاجرت به سرور ابری دوباره هزینه ترافیک نده! 🚀

با خرید اولین سرور ابری غیرساعتی از **هاست‌ایران**، بسته ترافیک هدیه مهاجرت به‌صورت خودکار برای سرویس شما فعال می‌شود:

✅ حداقل ۱۰۰ گیگابایت ترافیک هدیه مهاجرت
✅ افزایش حجم هدیه متناسب با ظرفیت دیسک اولیه
✅ ترافیک آپلود رایگان
✅ بدون محدودیت زمانی

سرور ابری هاست‌ایران را راه‌اندازی کنید و بکاپ‌ها، فایل‌ها و پایگاه داده خود را بدون دغدغه هزینه‌های پنهان ترافیک منتقل کنید.

👇 مشاهده پلن‌های سرور ابری هاست‌ایران
hostiran.club/Migration
hostiran.club/Migration
  • ❤ 3
Post #188 700

Forwarded from | کانال ربات تلگرام |

🧩 ورژن 4 فریم‌ورک LaraGram منتشر شد.

یکی از مهم‌ترین قابلیت‌های LaraGram 4، معرفی پکیج MTProto است؛ پکیجی که با هدف ساده‌سازی توسعه پروژه‌های مبتنی بر Telegram MTProto API طراحی شده است.

توسعه با MTProto معمولاً با چالش‌هایی مانند مدیریت Session، احراز هویت، نگهداری اتصال، دریافت Updateها، مدیریت Flood Wait و پیکربندی‌های پیچیده همراه است. در LaraGram تلاش شده تمام این پیچیدگی‌ها از مسیر توسعه‌دهنده حذف شود تا تجربه‌ای مشابه توسعه یک ربات معمولی، اما با قدرت کامل MTProto داشته باشید.

⚡️ شروع کار بدون دردسر با LaraGram Installer

برای اینکه حتی مرحله راه‌اندازی هم ساده باشد، LaraGram Installer تمام مراحل اولیه را برای شما انجام می‌دهد.

با استفاده از Installer، فرآیندهایی مانند:
- نصب LaraGram
- نصب و آماده‌سازی پکیج MTProto
- انجام کانفیگ‌های اولیه
- آماده‌سازی ساختار پروژه

به صورت خودکار انجام می‌شود.

بعد از نصب، کافی است Handlerهای موردنظر خود را تعریف کنید و منطق برنامه را بنویسید؛ بخش زیادی از کارهای مربوط به زیرساخت، اتصال و مدیریت سرویس توسط خود LaraGram انجام خواهد شد.

⚡️ قدرت گرفته از Surge و Swoole/OpenSwoole
‏MTProto در LaraGram بر پایه Surge و Swoole/OpenSwoole توسعه داده شده است؛ یعنی به جای اجرای سنتی PHP، از یک Runtime دائمی و Event-Driven استفاده می‌کند.

این معماری باعث می‌شود MTProto بتواند برای ارتباط‌های دائمی و پروژه‌های Real-Time عملکرد بسیار بهتری داشته باشد:

🚀 پردازش سریع‌تر Updateها
🔄 مدیریت همزمان اتصال‌ها
💾 مصرف بهینه‌تر منابع
⚡️ حذف سربار اجرای مجدد برنامه
📈 آمادگی برای پروژه‌های بزرگ و پرترافیک

🧠 تمام امکانات MTProto، آماده استفاده
در MTProto LaraGram بسیاری از قابلیت‌هایی که معمولاً نیاز به پیاده‌سازی دستی دارند، به صورت داخلی فراهم شده‌اند، به عنوان مثال شبیه سازی رفتار انسان، یا اعمال لیمیت‌های خودکار به صورت هوشمند.

در نتیجه، توسعه‌دهنده به جای درگیر شدن با جزئیات سطح پایین، روی ساخت قابلیت‌های اصلی پروژه تمرکز می‌کند.

نکته: به دلیل استفاده از Swoole/OpenSwoole، پکیج MTProto روی هاست‌های اشتراکی قابل اجرا نیست و برای استفاده از آن به یک VPS نیاز خواهید داشت.


‏🌐 MTProto + Web Routing؛ ساخت Telegram Client تحت وب

یکی از جذاب‌ترین بخش‌های LaraGram 4، ترکیب MTProto با Web Framework جدید LaraGram است.

ترکیب این قابلیت‌ها با MTProto به شما اجازه می‌دهد یک Telegram Web Client اختصاصی توسعه دهید؛ جایی که رابط کاربری از طریق سیستم وب LaraGram ساخته می‌شود و ارتباط مستقیم با تلگرام از طریق MTProto انجام می‌شود.

یعنی با یک اکوسیستم واحد می‌توانید:

‏Backend وب را مدیریت کنید
با Telegram API ارتباط داشته باشید
حساب‌های کاربری را مدیریت کنید
کلاینت‌ها و سرویس‌های اختصاصی تلگرامی بسازید

این تنها یکی از قابلیت های LaraGram است، پکیج Luna، یکی دیگر از آپدیت‌های بزرگ LaraGram برای توسعه مینی‌اپ ها با React/Vue/Svelte بدون درگیری با API نویسی، SPAs، یا InitData تلگرام است.

همچنین پکیج‌هایی برای توسعه با AI، ماینتورینگ ربات و... در حال توسعه هستند.

نسخه 4 آغاز مسیر جدید LaraGram است؛ مسیری که این پروژه را از یک فریم‌ورک ربات، به بستری کامل برای توسعه سرویس‌ها، کلاینت‌ها و اپلیکیشن‌های مبتنی بر تلگرام تبدیل می‌کند.

📚 مستندات کامل: https://laraxgram.github.io

⭐️ اگر LaraGram برای شما مفید است، خوشحال می‌شویم با معرفی پروژه و دادن Star در GitHub از توسعه آن حمایت کنید:

🔹 گیت‌هاب LaraGram
🔹 گیت‌هاب MTProto
🔹 گیت‌هاب Luna
  • 👍 11
Post #185 764
‏Repository Pattern در پروژه‌های لاراول 🧱

یکی از چیزهایی که پروژه‌های لاراول بزرگ را قابل‌نگهداری‌تر می‌کند، جدا کردن منطق دسترسی به دیتابیس از باقی لایه‌هاست. این‌جاست که Repository Pattern خیلی کمک می‌کند.

ایده ساده است: به‌جای این‌که کنترلر مستقیم با Model و کوئری‌ها درگیر شود، با یک اینترفیس صحبت می‌کند. پشت این اینترفیس هر وقت خواستیم می‌توانیم Eloquent را عوض کنیم، کش اضافه کنیم یا منبع داده را تغییر بدهیم، بدون این‌که کنترلر بشکند. 🔧

۱) تعریف Interface برای Repository
<?php

namespace App\Repositories;

interface UserRepositoryInterface
{
public function paginate(int $perPage = 15);

public function findById(int $id);

public function create(array $data);
}


۲) پیاده‌سازی با Eloquent
<?php

namespace App\Repositories;

use App\Models\User;

class EloquentUserRepository implements UserRepositoryInterface
{
public function paginate(int $perPage = 15)
{
return User::query()->latest()->paginate($perPage);
}

public function findById(int $id)
{
return User::query()->findOrFail($id);
}

public function create(array $data)
{
return User::query()->create($data);
}
}


۳) Bind کردن در Service Container لاراول
این کار را معمولاً در AppServiceProvider انجام می‌دهیم:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Repositories\UserRepositoryInterface;
use App\Repositories\EloquentUserRepository;

class AppServiceProvider extends ServiceProvider
{
public function register(): void
{
$this->app->bind(UserRepositoryInterface::class, EloquentUserRepository::class);
}
}


حالا هرجا UserRepositoryInterface را type-hint کنیم، به‌طور خودکار EloquentUserRepository تزریق می‌شود. این همان قدرت Dependency Injection در لاراول است. ⚡️

۴) استفاده در Controller تمیزتر
<?php

namespace App\Http\Controllers;

use App\Repositories\UserRepositoryInterface;
use App\Http\Requests\StoreUserRequest;

class UserController extends Controller
{
public function __construct(
private readonly UserRepositoryInterface $users
) {}

public function index()
{
$users = $this->users->paginate(20);

return view('users.index', compact('users'));
}

public function store(StoreUserRequest $request)
{
$this->users->create($request->validated());

return redirect()->route('users.index');
}
}


حالا کنترلر فقط روی flow و پاسخ تمرکز دارد، نه روی جزئیات کوئری‌ها. این کار:

• تست‌نویسی را ساده‌تر می‌کند (می‌توان Mock از Repository ساخت) ✅
• وابستگی به Eloquent را از سطح کنترلر کم می‌کند ✅
• تغییرات دیتابیس یا اضافه‌کردن لایه cache را راحت‌تر می‌کند ✅

برای مطالعه عمیق‌تر، مستندات Service Container لاراول را ببینید:
https://laravel.com/docs/container

کم‌کم که پروژه بزرگ‌تر می‌شود، استفاده درست از Repository Pattern می‌تواند ساختار کد را منظم‌تر، testableتر و قابل‌گسترش‌تر کند. از قدم‌های کوچک شروع شود؛ مثلاً از ماژول User یا Order و بعد سایر بخش‌ها را به این الگو مهاجرت بدهید. 🚀

🔖 #Laravel #PHP #لاراول #Laravel #Repository_Pattern #Clean_Code #Service_Container #PHP #Architecture

👤 Developix

💎 Channel: @DevelopixLaravel
  • ❤ 8
  • 👍 3
  • 👎 1
Post #184 1.04K
💠 نسخه جدید فریمورک لاراول (Laravel) منتشر شده است

🔸 ارتقا از نسخه 13.15.0 به 13.16.1

🔹 لیست تغییرات این نسخه:
- رفع مشکل ثبت‌نشدن برخی Dev Commandها
- بهبود پایدارسازی رجیستر شدن DevCommands
- سایر اصلاحات جزئی مرتبط با DevCommands و غیره

🔖 #laravel, #php, #laravel, #web, #release

💎 @DevelopixLaravel
  • 🔥 5
Post #183 1.09K
💠 نسخه جدید فریمورک لاراول (Laravel) منتشر شده است

🔸 ارتقا از نسخه 13.14.0 به 13.15.0

💎 @DevelopixLaravel
  • 👍 5
Post #182 1.04K
پکیج امروز: ‎spatie/laravel-permission برای مدیریت حرفه‌ای نقش‌ها و سطح دسترسی در Laravel 🔐

وقتی پروژه بزرگ می‌شود، ifهای تودرتو برای role و permission کد را به‌هم می‌ریزد. این پکیج یک سیستم تمیز RBAC روی Eloquent می‌آورد و با Gate / Policy کاملاً سازگار است.

ویژگی‌ها:
• تعریف role و permission داینامیک از دیتابیس 🧩
• attach شدن به User model با relationهای تمیز
• middleware آماده مثل ‎role و ‎permission
• پشتیبانی از چند guard

نصب و استفاده سریع:
composer require spatie/laravel-permission

php artisan vendor:publish \
--provider\=
"Spatie\Permission\PermissionServiceProvider"

php artisan migrate

// در User model:
use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
use HasRoles;
}

// استفاده:
$user->assignRole('admin');
$user->givePermissionTo('edit articles');


برای پنل ادمین، SaaS یا هر اپ multi-tenant، این پکیج واقعا زمان توسعه و باگ‌های دسترسی را کم می‌کند.

مستندات رسمی:
Docs
GitHub

امتحانش در پروژه بعدی، معماری auth شما را مرتب‌تر و قابل‌گسترش‌تر می‌کند 🚀

🔖 #Laravel #PHP #لاراول #Laravel #PHP #spatie #permission #RBAC #auth #eloquent

👤 Developix

💎 Channel: @DevelopixLaravel
  • 👍 6
  • ❤ 2
Post #181 1.05K
‎تمیز کردن کنترلرهای Laravel با Service Layer 🧼

خیلی وقت‌ها کنترلرهای Laravel کم‌کم تبدیل می‌شوند به محل تجمع همه‌چیز: validation، منطق بیزنسی، queryهای Eloquent، ارسال notification و…

این یعنی:

• سختی در تست کردن 🧪
• کدهای تکراری در چند کنترلر
• سختی در تغییر منطق بیزنسی بدون شکستن endpointها

یکی از الگوهای ساده و کاربردی برای حل این مشکل در Laravel، استفاده از Service Layer است.

ایده اصلی ✨

هر action در کنترلر فقط کارهای زیر را انجام دهد:

• دریافت و validate ورودی
• صدا زدن یک Service (یا چند Service)
• برگرداندن Response مناسب (JSON / View)

تمام منطق بیزنسی داخل کلاس‌های Service قرار می‌گیرد.

نمونه سناریو: ثبت سفارش 🛒

قبل از refactor (کنترلر چاق)
class OrderController extends Controller
{
public function store(Request $request)
{
$data = $request->validate([
'user_id' => ['required', 'exists:users,id'],
'items' => ['required', 'array'],
]);

$user = User::findOrFail($data['user_id']);

$order = DB::transaction(function () use ($user, $data) {
$order = $user->orders()->create();

foreach ($data['items'] as $item) {
$order->items()->create($item);
}

if ($user->isVip()) {
$order->applyDiscount(10);
}

return $order;
});

Notification::send($user, new OrderCreated($order));

return response()->json($order, 201);
}
}


کنترلر هم transaction دارد، هم business rule (Vip)، هم notification.

بعد از refactor با Service ✅

۱) ساخت Service:
namespace App\Services;

use App\Models\User;
use App\Notifications\OrderCreated;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Notification;

class OrderService
{
public function createOrderForUser(User $user, array $items)
{
$order = DB::transaction(function () use ($user, $items) {
$order = $user->orders()->create();

foreach ($items as $item) {
$order->items()->create($item);
}

if ($user->isVip()) {
$order->applyDiscount(10);
}

return $order;
});

Notification::send($user, new OrderCreated($order));

return $order;
}
}


۲) تزریق Service در کنترلر (Dependency Injection از Service Container):
use App\Models\User;
use App\Services\OrderService;
use Illuminate\Http\Request;

class OrderController extends Controller
{
public function __construct(private OrderService $orderService)
{
}

public function store(Request $request)
{
$data = $request->validate([
'user_id' => ['required', 'exists:users,id'],
'items' => ['required', 'array'],
]);

$user = User::findOrFail($data['user_id']);

$order = $this->orderService
->createOrderForUser($user, $data['items']);

return response()->json($order, 201);
}
}


مزایا 💡

• کنترلرها کوتاه و قابل‌خواندن
• قابلیت استفاده مجدد از منطق در Job، Command، Event Listener و…
• آماده‌تر شدن برای تست واحد (Unit Test) روی Serviceها به‌جای تست‌های سنگین روی کنترلر

منابع پیشنهادی 📚

• مستندات Service Container در Laravel:
laravel.com/docs/container

این الگوی ساده اگر از همین امروز در پروژه لاراول‌تان اجرا شود، معماری تمیزتری می‌سازد و تغییرات بعدی را بسیار کم‌هزینه‌تر می‌کند 🌱

🔖 #Laravel #PHP #لاراول #Laravel #Service_Layer #Clean_Code #Controller #PHP #Architecture

👤 Developix

💎 Channel: @DevelopixLaravel
  • 👍 4
  • ❤ 3
Older posts →

About this channel

How can I read @developixlaravel without a Telegram account?
TGViewer shows the public web preview Telegram publishes for | کانال توسعه‌دهندگان لاراول |: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does | کانال توسعه‌دهندگان لاراول | have?
| کانال توسعه‌دهندگان لاراول | (@developixlaravel) has 1.54K subscribers on Telegram, refreshed roughly every 30 minutes.
Does | کانال توسعه‌دهندگان لاراول | know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →