لارافيل, Others / 2024-07-18

ما هو stubs في لارافيل ؟

ما هو stubs في لارافيل ؟

2024-07-18 وقت القراءه : 1 دقائق

عند إنشاء model في لارافيل، فإنه بشكل تلقائي يأتي مع use HasFactory، من أجل التعامل مع ملفات الـ factory لإدخال البيانات الوهمية لقاعدة البيانات.

class Article extends Model
{
    use HasFactory;
}

لكن السؤال، ماذا إذا كنت في مشروعنا لا نقوم بإنشاء ملفات factory، ولا نريد أن يأتي الـ model مع use HasFactory.

هنا تبرز أهمية الـ stubs


ما هو الـ stubs في لارافيل؟

لارافيل stubs هي helper modules تساعدنا في تخصيص الملفات والكلاسات التي يتم إنشائها من خلال أوامر artisan، وذلك من خلال عمل override للخصائص الإفتراضية.


أمثلة على إستخدام laravel stubs

المثال الأول

عندما نقوم بإدخال البيانات إلى قاعدة البيانات ، وكنا نستخدم الدالة 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 سوف يكون فارغ .


التعليقات
زائر
منذ سنة

استمر مقالات ممتازه جداااا ماشاء الله

Eslam Gamal
منذ سنة

جزاك الله خيرا

إضافة تعليق
Loading...