اذهب إلى المحتوى

السؤال

نشر

أريد أن أقوم بكتابة log وتنفيذ بعض الأكواد قبل أن يتم حفظ أي منشور جديد Post في قاعدة البيانات، حاولت البحث عن دوال مثل beforeSave أو afterSave في لارافيل Laravel ولكن لم أجد شيء.

class Post extends Model 
{

    public static function before_save()
    {
		// ...
    }

}

هل توجد طريقة لتنفيذ كود معين قبل أن يتم حفظ منشور جديد في لارافيل Laravel؟

Recommended Posts

  • 2
نشر

يمكن تنفيذ تعليمات خلال مراحل معينة من دورة حياة النموذج Model، يمكنك تسجيلها ضمن التابع booted ضمن صنف النموذج، التوابع التي ستستخدمها لحالتك هي:

  • saving يتم تنفيذه قبل حفظ النموذج
  • saved يتم تنفيذه بعد حفظ النموذج

ويمكنك داخلها الوصول لكائن النموذج الذي تتم عملية الحفظ عليه من خلال المعامل post$ الممرر للتابع الذي تسجله لكل حدث من تلك الأحداث بالشكل التالي:

class Post extends Model
{
    protected static function booted()
    {
        static::saving(function ($post) {
            // قبل الحفظ
        });

        static::saved(function ($post) {
            // بعد الحفظ
        });
    }
}

 

  • 2
نشر

يمكنك الاستعانة بمفهوم المراقبة او المراقبين Observers لتحقيق هذا الغرض. وهي مثل عمليات مراقبة الاحداث التي تختص بنموذج ما.

تحتوي أصناف Observer في لارافيل على توابع يمثل كل منها حدثا من أحداث Eloquent التي ترغب في الاستماع إليها.

<?php
 
namespace App\Observers;
 
use App\Models\User;
 
class UserObserver
{
    /**
     * Handle the User "created" event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function created(User $user)
    {
        //
    }
 
    /**
     * Handle the User "updated" event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function updated(User $user)
    {
        //
    }
 
    /**
     * Handle the User "deleted" event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function deleted(User $user)
    {
        //
    }
 
    /**
     * Handle the User "restored" event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function restored(User $user)
    {
        //
    }
 
    /**
     * Handle the User "forceDeleted" event.
     *
     * @param  \App\Models\User  $user
     * @return void
     */
    public function forceDeleted(User $user)
    {
        //
    }
}

لاحظ ان كل تابع يستقبل النموذج المستهدف. سيمكنك معاملته وفق اي منطق وتطبيق اي ما تريد عليه قبل حفظه الى قاعدة البيانات بشكل تام.

نستعمل الأمر:

php artisan make:observer UserObserver --model=User

لإنشاء مراقب جديد. ونقوم بتسجيله في توابع boot لأحد موفرات الخدمة، يقترح ان يكون موفر خدمة التطبيق AppServiceProvider:

public function boot()
{
    User::observe(UserObserver::class);
}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...