簡體   English   中英

Symfony私人信息系統

[英]Symfony private messaging system

我來找你是因為我需要幫助,現在我創建一個廣告網站,我想要創建的是一個私人消息傳遞系統,也就是說,有2個用戶可以說這句話,例如,如果第3個用戶找到了網址並在url上,他不能寫消息或其他信息,而無需經過第三方分發包,我想自己做所有事情

我有一個實體廣告,用戶,最后是消息

我有這樣的關系:

用戶=>消息:OneToMany廣告=>消息OneToMany

所以我的問題是如何將路線限制為僅2人,以及如何顯示他們的消息?

我應該改變我的關系嗎? 如何在控制器中處理此問題?

我將代碼共享給一個小控制器:

/**
     * @Route("/messages/{id}", name="messages")
     * @param int $id
     * @return Response
     * @throws \Exception
     */
    public function messagesShow(int $id): Response {

        $user = $this->getUser();
        $advertisement = $this->getDoctrine()->getRepository(Advertisement::class)->findByMessages($id);

        $messages = $this->getDoctrine()->getRepository(Message::class)->findByMessages($user, $advertisement);

        return $this->render('advertisement/messages.html.twig', [
            'test' => $messages,
            'advertisement' => $advertisement
        ]);
    }

和存儲庫:

/**
 * @param int $id
 * @return Advertisement|null
 * @throws \Exception
 */
public function findByMessages(int $id): ?Advertisement {

    $query = $this->createQueryBuilder('a')
    ->select('a')
    ->from('App:Advertisement', 'r')
    ->where('a.id = :id')
    ->leftJoin('a.message', 'm')
    ->setParameter(':id', $id)
    ->getQuery()
    ;

    try {
        return $query->getOneOrNullResult();
    }
    catch (\Exception $e) {
        throw new \Exception('Problème' . $e->getMessage() . $e->getLine());
    }
}


/**
     * @param User $user
     * @param Advertisement $advertisement
     * @return Message|null
     * @throws \Exception
     */
    public function findByMessages(User $user, Advertisement $advertisement) {

    // SELECT * FROM `message` WHERE advertisement_id = 5 AND user_id = 1
        $query = $this->createQueryBuilder('m')
        ->select('m')
        ->from('App\Entity\Message', 'n')
        ->join('m.advertisement', 'a')
        ->where('m.advertisement = :advertisement')
        ->andWhere('m.user = :user')
        ->setParameter(':user', $user)
        ->setParameter(':advertisement', $advertisement)
        ->getQuery()
        ;

        try {
            return $query->getResult();
        }
        catch (\Exception $e) {
            throw new \Exception('Problème' . $e->getMessage() . $e->getLine());
        }
    }

謝謝你的幫助 ! :d

創建一個與Conversation表有關系的“ ConversationUsers表,以跟蹤允許哪些用戶參與對話。 Conversation對象還應該跟蹤屬於該ConversationMessage對象。 然后,您可以簡單地在代碼中加載Conversation ,並可以100%確保只有參與該操作的用戶才能看到該Conversation 視覺(請原諒x-mind,因為我無法使用當前計算機上的適當工具...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM