وقّف نسخ الكود! اتعلم تستخدم Traits في Laravel صح

يوليو 1, 2025

🚫 وقّف نسخ الكود!

لو عندك نفس المنطق في كذا Model أو Controller زي Slug أو Logging، Traits في Laravel هتوفر عليك تعب الكتابة والتكرار.

1. إيه هو Trait؟

Trait ببساطة باكج مكتوب فيها دوال reusable تقدر تزودها لأي كلاس.

trait Sluggable {
  public function createSlug(string $text): string {
    return \Illuminate\Support\Str::slug($text, '-');
  }
}

2. ازاي تعمل Trait

اكتب الأمر ده:

php artisan make:trait Traits/Sluggable

ده هيطلعلك ملف في app/Traits/Sluggable.php بداخله الكود اللي فوق.

3. ازاي تستخدمها في Model

namespace App\Models;

use App\Traits\Sluggable;
use Illuminate\Database\Eloquent\Model;

class Product extends Model {
  use Sluggable;

  protected static function booted() {
    static::creating(fn($p) => $p->slug = $p->createSlug($p->name));
  }
}

4. امتى تستخدم Traits؟

  • ✅ لو عندك نفس الدوال في كذا كلاس
  • ✅ عاوز تبعد عن التعقيد بتاع الـ inheritance

5. أمثلة في الواقع

  • HasUuid – يضيف UUID تلقائي على كل Model
  • LogsActivity – يسجل أفعال المستخدمين
  • ApiResponse – يوحّد شكل الردود في JSON

6. امتى مش تستخدم Traits؟

  • ❌ لو المنطق معقد وعاوز تعتمد على Dependency Injection
  • ❌ لما Trait يبقى فيه دوال كتير مش مترابطة
  • ❌ لو Trait مستخدمة من كلاس واحد بس
  • ❌ لو الكود هو business logic أساسي – استخدم Service Class

الخاتمة

Traits حاجة قوية جدًا لإعادة الاستخدام والحفاظ على نظافة الأكواد—لو استخدمتها صح. المرة الجاية قبل ما تعمل copy + paste إسأل نفسك: "ممكن دي تبقى Trait؟"

المدونة

مقارنة بين Scopes + Traits × UseEloquentBuilder في Laravel

يوليو 13, 2025

في Laravel، بنحتاج دايمًا نكتب استعلامات شبه بعض في أكتر من مكان. Laravel بتوفر طريقتين أساسيين نقدر نستخدمهم علشان نرتّب الاستعلامات دي: Scopes + Tra...

إتقان التحقق الشرطي في Laravel 12

يوليو 07, 2025

إتقان التحقق الشرطي في Laravel 12 في Laravel 12، نظام التحقق (validation) قوي جدًا، وميزة التحقق الشرطي بتخليك تتحكم في القوانين بتاعتك ب...

إزاي OAuth بيشتغل

يونيو 29, 2025

إزاي OAuth بيشتغل؟ OAuth هو بروتوكول بيخلّي التطبيقات تقدر تدخل على بياناتك بطريقة آمنة من غير ما تدّيهم الباسورد بتاعك. زي مثلًا لو حبيت تطبيق ينشر...

حلل مشروع Laravel بـ Introspect

يوليو 01, 2025

حلل كود Laravel باستخدام Laravel Introspect لو بتعمل Refactor كبير أو بتبني أدوات Dev‪، Laravel Introspect بيسمحلك تستعلم عن الكود: فيوز، مودلز، رو...

استدعاء ملفات JavaScript عند الحاجة فقط لتحسين أداء موقعك

يوليو 24, 2025

🧠 يعني إيه Dynamic Import؟ الديناميـك إمبورت ببساطة هو إنك تحمّل ملف أو موديول JavaScript "وقت الحاجة بس" مش من أول الصفحة. الميزة دي بتقلل حجم ال...

دليل للأنيميشن المتحركة بالسكّول بس بـ CSS

يونيو 26, 2025

دليل للأنيميشن المتحركة بالسكّول بـ CSS دلوقتي تقدر تربط الأنيميشن بتاعتك بـ السكّول من غير جافاسكريبت — كله CSS بحت. 1. التلات مكونات بتوع...

The Ultimate Managed Hosting Platform