在我的Symfony項目中,當使用embedded Twig controllers時,我遇到了kernel.request
event listeners多次觸發的奇怪問題。Embedded Twig控制器導致kernel.request事件觸發多次
在我的自定義事件偵聽器中,我有一個事件偵聽器,如果某個條件存在(在這種情況下是過期的密碼),它會發送重定向響應。爲了防止重定向循環,我檢查了我們是否已經在頁面上:
if ($event->getRequest()->get('_route') != 'user_change_password') {
$response = new RedirectResponse($this->router->generate('user_change_password'));
$event->setResponse($response);
}
但是,這並沒有阻止重定向循環。在我添加日誌記錄之前,我不知道嵌入式控制器會觸發kernel.request
事件(事後很明顯,因爲這些嵌入式控制器通過發送「子請求」工作)。我有一個嵌入式控制器通過基本樹枝模板檢查任何警報消息並顯示它們。
鑑於上述,我怎麼能
- 能夠插入動態內容爲基本模板(即所有其他模板擴展),和
- 沒有
kernel.request
事件偵聽器觸發多次。
即使Symfony建議使用嵌入式控制器將該動態內容插入到基本模板中,這是否被認爲是不正確的做法?
創建Twig extension來解決這個問題會更好嗎?從我看到的情況來看,Twig擴展通常只用於簡單的東西,比如食譜中的price
示例,但我不明白爲什麼它不適用於更復雜的數據庫連接的東西。我只是不確定如何做到這一點。
例如讚賞。
可能相關?:Symfony Controller executed multiple Time
kernel.request是爲每個請求觸發的,這包括子請求,如{{render(controller('...'))}} –
那是正確的,這就是我所說的。我試圖找到解決上述問題的解決方案,這是xabbuh提供的。 – user128216