عند إنشاء model في لارافيل، فإنه بشكل تلقائي يأتي مع use HasFactory، من أجل التعامل مع ملفات الـ factory لإدخال البيانات الوهمية لقاعدة البيانات.
class Article extends Model { use HasFactory; }
لكن السؤال، ماذا إذا كنت في مشروعنا لا نقوم بإنشاء ملفات factory، ولا نريد أن يأتي الـ model مع use HasFactory.
هنا تبرز أهمية الـ stubs
لارافيل stubs هي helper modules تساعدنا في تخصيص الملفات والكلاسات التي يتم إنشائها من خلال أوامر artisan، وذلك من خلال عمل override للخصائص الإفتراضية.
عندما نقوم بإدخال البيانات إلى قاعدة البيانات ، وكنا نستخدم الدالة create فإننا بحاجة لتعريف $fillabe أو $guarded في الموديل ويتم تعريفها بشكل يدوي في كل model، ماذا لو كنا نريد أنه عند إنشاء أي موديل أن تأتي الخصائص $fillble أو guarded معرفة بشكل مسبق.
بداية ننفذ الأمر
php artisan stub:publish
بعد تنفيذ الأمر، بداخل المشروع يظهر مجلد جديد بإسم stubs، وبداخله مجموعة من الملفات التي نستطيع تخصيصها
من ضمن هذه الملفات نبحث عن الملف model.stub نجد إنه model فارغ بداخله نستطيع وضع الخصائص التي نريدها، فيكون شكلة كالتالي
<?php namespace {{ namespace }}; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class {{ class }} extends Model { }
الأن نقوم بإضافة الخاصية $guarded
<?php namespace {{ namespace }}; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class {{ class }} extends Model { use HasFactory; protected $guarded = []; }
الأن عند أي model يتم إنشاؤه، يأتي مع الخاصية $guarded.
ماذا لو كنا نريد أنه عند إنشاء أي موديل أن يأتي دون use HasFactory.
كل ما علينا القيام به هو الذهاب للملف model.stubs وإزالة useHasFactory
عند أنشاء أي كلاس لعمل test يكون شكل (template) الكلاس بالشكل التالي
php artisan make:test someTest
class someTest extends TestCase { /** * A basic feature test example. * * @return void */ public function test_example() { $response = $this->get('/'); $response->assertStatus(200); } }
ماذا لو أردنا أن يأتي دون الدوال test_example وكذلك الـ comment
بعد أن نكون قد نفذنا الأمر
php artisan stub:publish
نذهب لمجلد stubs ثم للملف ونقوم بإزالة الدالة test_example وكذلك الـ comments فيصبح شكلة بالشكل التالي
class {{ class }} extends TestCase { }
الأن عند إنشاء أي كلاس للـ test سوف يكون فارغ .
جزاك الله خيرا
زائر
استمر مقالات ممتازه جداااا ماشاء الله