takix Önce bir event ve bir de listener oluşturun:
php artisan make:event StoryCreated
php artisan make:listener NotifyAdminAboutNewStory --event=StoryCreated
Verdiğim isimlere bakın, ne yapacağımı anlatıyorum; "Hikaye oluşturuldu", "Admini yeni hikaye hakkında bilgilendir".
Bunu App\Providers\EventServiceProvider::$listen[] dizisi içine ekliyorsunuz:
\App\Events\StoryCreated::class => [
\App\Listeners\NotifyAdminAboutNewStory::class,
]
Bu, NotifyAdminAboutNewStory dinleyicisi StoryCreated olayını dinlesin demek. StoryCreated ateşlendiğinde NotifyAdminAboutNewStory onu yakalayıp işlem yapabilecek.
app/Events/StoryCreated.php içinde constructor parametresi olarak sizin Items diye yanlış ve anlamsız isimlendirdiğiniz modeli alacağız, ismi değiştirmeden alıyorum. Bu sayede modeli işlem yapabilmek için NotifyAdminAboutNewStory dinleyicisine taşıyabileceğiz:
public function __construct(
public Items $items,
)
{
}
app/Listeners/NotifyAdminAboutNewStory.php içinde de bu olay otomatik olarak constructor parametresi olarak gelir (listener oluştururken --event=StoryCreated şeklinde argüman kullandığımız için)
public function handle(StoryCreated $event)
{
// Artık burada yanlış ve anlamsız isimlendirdiğiniz Items modeline $event->items
// şeklinde ulaşabilir ve işlem yapabiliriz. Örneğin size mail gönderelim:
Mail::to('takix@domain.com')
->send(new \App\Mail\StoryCreated($event->items));
}
Buradaki \App\Mail\StoryCreated mailini oluşturmak için:
https://laravel.com/docs/9.x/mail
Şimdi bunu nasıl kullanacaksınız? Şöyle:
$create_item = Items::create([
'title' => $request->title,
'story' => $string,
'slug' => Str::slug($request->title),
'status' => Settings::find('new_entries')->value,
'user_id' => Auth::id(),
'category_id' => $request->category_id,
'genders_id' => $request->genders_id,
'age' => $request->age,
]);
event(new \App\Events\StoryCreated($create_item));