我有一個 Symfony 服務,用于向數據庫添加警報(DOM 中的引導警報),以允許管理員審核應用程序的使用情況,并且該服務還將警報保存在會話存儲中以顯示警報,直到用戶關閉每個警報。這是服務方法的代碼:public function addAlert(DateTimeInterface $eventDatetime, string $eventType, string $data, UserInterface $user, string $alertId): bool{ $success = false; try { //Build alert entity $alert = new UserAlert(); $alert->setDatetimeUTC($eventDatetime); $alert->setEventType($eventType); $alert->setMessage($data); $alert->setUser($user); //Save in database $this->entityManager->persist($alert); $this->entityManager->flush(); //Save in session $success = $this->saveAlertInSession($alertId, $eventType, $data); } catch (Throwable $throwable) { $this->logger->critical("Add User Alert Service: Ko. Details: {$throwable->getMessage()}."); } return $success;}private function saveAlertInSession(string $alertId, string $eventType, string $data): bool{ $alerts = []; try { //Check if any alert is stored to retrieve if ($this->session->has('alerts')) { $alerts = $this->session->get('alerts'); } //Add new alert $alerts[$alertId] = [ 'type' => $eventType, 'data' => $data, ]; //Save to session $this->session->set('alerts', $alerts); $success = true; } catch (Throwable $throwable) { $success = false; $message = "Save Alert Session: Ko. Details: {$throwable->getMessage()}."; $this->logger->critical($message); } return $success;}我的問題是 Symfony 是否有一個事件偵聽器來在每次我在控制器上編寫以下行時自動調用此服務方法:$this->addFlash('success', $message);$this->addFlash('error', $message);$this->addFlash('warning', $message);現在,在我向 Flash Bag 消息中添加一條消息后,我的控制器將執行以下指令:$this->alertsService->addAlert($datetimeUTCNow, $eventType, $message, $user, $alertId);你知道有什么事件偵聽器可以避免每次控制器調用 addFlash 方法時都寫這一行嗎?我正在使用 Symfony 5 和 PHP 7.3
1 回答

長風秋雁
TA貢獻1757條經驗 獲得超7個贊
這是我覆蓋 addFlash 方法的解決方案:
protected function addFlash(string $type, string $message): void
{
// Generate the required arguments on userAlerts service
try {
$datetimeUTC = new DateTime('now', new DateTimeZone('UTC'));
$alertId = Uuid::uuid4();
$this->userAlertsService->addAlert($datetimeUTC, $type, $message, $this->getUser(), $alertId);
} catch (Throwable $throwable) {
$this->logger->critical("Add Flash: Ko. Details: {$throwable->getMessage()}");
}
parent::addFlash($type, $message);
}
- 1 回答
- 0 關注
- 81 瀏覽
添加回答
舉報
0/150
提交
取消