Emad Saif نشر 3 أغسطس 2022 أرسل تقرير نشر 3 أغسطس 2022 أريد أن أقوم بكتابة log وتنفيذ بعض الأكواد قبل أن يتم حفظ أي منشور جديد Post في قاعدة البيانات، حاولت البحث عن دوال مثل beforeSave أو afterSave في لارافيل Laravel ولكن لم أجد شيء. class Post extends Model { public static function before_save() { // ... } } هل توجد طريقة لتنفيذ كود معين قبل أن يتم حفظ منشور جديد في لارافيل Laravel؟ 2 اقتباس
2 Hassan Hedr نشر 3 أغسطس 2022 أرسل تقرير نشر 3 أغسطس 2022 يمكن تنفيذ تعليمات خلال مراحل معينة من دورة حياة النموذج Model، يمكنك تسجيلها ضمن التابع booted ضمن صنف النموذج، التوابع التي ستستخدمها لحالتك هي: saving يتم تنفيذه قبل حفظ النموذج saved يتم تنفيذه بعد حفظ النموذج ويمكنك داخلها الوصول لكائن النموذج الذي تتم عملية الحفظ عليه من خلال المعامل post$ الممرر للتابع الذي تسجله لكل حدث من تلك الأحداث بالشكل التالي: class Post extends Model { protected static function booted() { static::saving(function ($post) { // قبل الحفظ }); static::saved(function ($post) { // بعد الحفظ }); } } 1 اقتباس
2 Adnane Kadri نشر 4 أغسطس 2022 أرسل تقرير نشر 4 أغسطس 2022 يمكنك الاستعانة بمفهوم المراقبة او المراقبين 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); } 1 اقتباس
السؤال
Emad Saif
أريد أن أقوم بكتابة log وتنفيذ بعض الأكواد قبل أن يتم حفظ أي منشور جديد Post في قاعدة البيانات، حاولت البحث عن دوال مثل beforeSave أو afterSave في لارافيل Laravel ولكن لم أجد شيء.
هل توجد طريقة لتنفيذ كود معين قبل أن يتم حفظ منشور جديد في لارافيل Laravel؟
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.