私の Symfony プロジェクトで、組み込みの 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 拡張機能を作成したほうがよいでしょうか? 私が見た限りでは、Twig エクステンションは通常、クックブックのprice
例のように単純なものにのみ使用されますが、データベースに接続されたより複雑なものでは機能しない理由がわかりません。それを行う方法がわかりません。
例は高く評価されます。
関連する可能性がありますか?: Symfony Controller が複数回実行されました