Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Merhaba, laravel'i yeni yeni öğrenme aşamasındayım. Yaptığım projede kullanıcının oluşturduğu gönderi ve soruları var. Başka bir kullanıcı oluşturulan gönderiye yorum yaptığında veya soruya cevap verdiğinde içeriğin sahibine bildirim göndermek istiyorum. Kurduğum yapı aşağıdaki gibi, sistem sorunsuz çalışıyor. Konuyu açmamdaki amaç doğru bir mantıkla mı yapmışım, öğrenmişken yanlış öğrenmek istemiyorum, fikir verirseniz sevinirim.
Events (PostCommented, QuestionAnswered)
Listeners(PostCommentActionListener, QuestionAnswerActionListener)
Notification(PostCommentNotification, QuestionAnswerNotification)
Aşağıya sadece gönderiye yorum yapıldığında bildirimi kaydeden kodları yazdım, bunun aynısının soru/cevap kısmı için olanı da var.
#PostCommented

class PostCommented
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $comment;
    public $user;

    public function __construct($comment, $user)
    {
        $this->comment  = $comment;
        $this->user     = $user;
    }

    public function broadcastOn()
    {
        return new PrivateChannel('channel-name');
    }
}

#PostCommentActionListener

class PostCommentActionListener
{
    public function __construct()
    {
        //
    }

    public function handle(PostCommented $postCommented)
    {
        $comment = $postCommented->comment;

        $postCommented->user->notify(new PostCommentNotification($comment));
    }
}

#PostCommentNotification

class PostCommentNotification extends Notification
{
    use Queueable;

    public function __construct($comment)
    {
        $this->comment = $comment;
    }

    public function via($notifiable)
    {
        return ['database'];
    }

    public function toDatabase(mixed $notifiable)
    {
        return [
            'message'       => auth()->user()->user_name . ' gönderine yorum yaptı',
            'time'          => $this->comment->created_at,
            'link'          => route('app.post.detail', $this->comment->post->slug)
        ];
    }

    public function toArray($notifiable)
    {
        return [
            //
        ];
    }
}

#EventServiceProvider

class EventServiceProvider extends ServiceProvider
{
    /**
     * The event to listener mappings for the application.
     *
     * @var array<class-string, array<int, class-string>>
     */
    protected $listen = [
        Registered::class => [
            SendEmailVerificationNotification::class,
        ],

        PostCommented::class => [
            PostCommentActionListener::class,
        ],

        QuestionAnswered::class => [
            QuestionAnswerActionListener::class,
        ]
    ];
}

![https://prnt.sc/1DZ7wna29jsP](https://)

  • mgsmus bunu yanıtladı.
    • En İyi YanıtZeta tarafından

    Zeta Notification, Job... gibi kuyrukta olabilecek işlemlerde auth kullanmananız gerekiyor. İşlem kuyrukta gerçekleşirse auth hiç olmayacak. PostCommentNotification constructor'üne yorum yapan user parametresi ekleyerek onu içeri alabilir ve toDatabase içinde kullanabilirsiniz.

    İsimlendirmelerde ise; listener için yapılan işin adını verin. Mesela PostCommentNotification yerine SendPostCommentedNotification ya da LogPostCommentedNotification gibi. Böyle yaparsanız $listen dizisine baktığınızda daha anlaşılır olduğunu görürsünüz:

    PostCommented::class => [                 // Yazıya yorum yapıldığında
        SendPostCommentedNotification::class, // Yorum yapıldı bildirimi gönder
    ],
    • mgsmus

      Seviye 1382
    • Düzenlendi
    • En İyi YanıtZeta tarafından

    Zeta Notification, Job... gibi kuyrukta olabilecek işlemlerde auth kullanmananız gerekiyor. İşlem kuyrukta gerçekleşirse auth hiç olmayacak. PostCommentNotification constructor'üne yorum yapan user parametresi ekleyerek onu içeri alabilir ve toDatabase içinde kullanabilirsiniz.

    İsimlendirmelerde ise; listener için yapılan işin adını verin. Mesela PostCommentNotification yerine SendPostCommentedNotification ya da LogPostCommentedNotification gibi. Böyle yaparsanız $listen dizisine baktığınızda daha anlaşılır olduğunu görürsünüz:

    PostCommented::class => [                 // Yazıya yorum yapıldığında
        SendPostCommentedNotification::class, // Yorum yapıldı bildirimi gönder
    ],

    @mgsmus yönlendirmeler için teşekkürler, kodları düzenliyorum (y)