SymfonyのFilterControllerEventでリダイレクトする方法をいつも忘れてググってしまう・・・。
FilterControllerEvent::setController()って引数はcallableなものであればいいので、無名関数でもいい。 なので、以下のようにRedirectResponseをreturnする無名関数をセットすればリダイレクトする。
|
|
普通にControllerが呼び出されたときは何がセットされているのか?
ちょっと疑問に思ったのは普通にコントローラが呼び出されるときに$event->getController();
には何が入っているのか?
答えはコントローラオブジェクトとメソッド名が配列になってい入っている。
一瞬callableじゃなくね?って思ってしまったのだが、これcallableなんですよね。
配列の0番にオブジェクト、1番に実効するメソッドってやるcallableになる。
|
|
ちなみにstaticメソッドも呼び出すことができる
|
|
最後に
Symfonyは別にControllerクラスを継承する必要もないし、結局Callableなもで、Responseオブジェクトをreturnすればいいみたい。
ほんと柔軟にいろいろなことができて便利ですね。
ちなみに普段Controllerはどう呼ばれているのかとか気になる方はControllerResolverあたりの実装から読んでいくと良いかもです。
参考:php - Symfony2 redirect for event listener? - Stack Overflow