Mahmoud Alrashidi نشر 27 فبراير 2021 أرسل تقرير نشر 27 فبراير 2021 لدي نموذج Post و ملف تهجير به الأعمدة التالية: <?php Schema::create('posts', function (Blueprint $table) { $table->id(); $table->string('title'); $table->string('slug'); $table->text('body'); $table->timestamps(); }); أريد عند إنشاء سجل من هذا النموذج يتم إعطاء slug تلقائياً حسب العُنوان المُمرر. اقتباس
1 سمير عبود نشر 27 فبراير 2021 أرسل تقرير نشر 27 فبراير 2021 يُمكنك عمل هذا الأمر بإستخدام أحد هذه الطرق: تمرير قيمة ال slug أثناء إنشاء السجل في المُتحكم: <?php use Illuminate\Support\Str; Post::create([ 'title' => request('title'), 'body' => request('body'), 'slug' => Str::slug(request('title')) ]); إعادة تعريف الدالة boot في المُتحكم Post و التسمع على الحدث creating: <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; use Illuminate\Support\Str; class Post extends Model { use HasFactory; protected $guarded = []; protected static function boot() { parent::boot(); static::creating(function ($post) { $post->slug = Str::slug($post->title); }); } } يُمكن التسمع على عدة أحداث: creating، created ، deleting، deleted، updating، updated ... لكن إن كانت الأحداث التي تُريد التسمع عليها كثيرة و ترغب بعمل شيء ما عند كل حدث فسيُصبح النموذج مُكتض بالشيفرات و ستصعب عليك عملية ال refactoring ففي هذه الحالة الأفضل إستخدام مُراقب (observer) لهذا النموذج. إستخدام مراقب (observer): أولاً إنشاء المُراقب: php artisan make:observer PostObserver --model=Post سيُنشئ الأمر ملف جديد في المسار: app/Observers و من خلاله يُمكنك مراقبة النموذج الخاص بك. ثانياً في حالتنا سنُضيف الدالة: creating : <?php namespace App\Observers; use App\Models\Post; use Illuminate\Support\Str; class PostObserver { public function creating(Post $post) { $post->slug = Str::slug($post->title); } // others methods } ثالثاً نقوم بربط المُراقب بالنموذج الذي سيُراقبه و يتم ذلك على مُستوى مُزود الخدمة EventServiceProvider في الدالة boot: <?php use App\Models\Post; use App\Observers\PostObserver; public function boot() { Post::observe(PostObserver::class); } 3 اقتباس
السؤال
Mahmoud Alrashidi
لدي نموذج Post و ملف تهجير به الأعمدة التالية:
أريد عند إنشاء سجل من هذا النموذج يتم إعطاء slug تلقائياً حسب العُنوان المُمرر.
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.