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