Symfony Best Practice - 実践編 Chapter5-4-
前回
いじった結果は随時GitHubにあげていきます。
フックを使う
ドキュメントに沿って確認してみよう。 まずはdemoアプリですでに登録されているイベントリスナーを確認する。
ロケールの切り替えを行うイベントリスナーが登録されている。 イベント一覧によると、Requestイベントをフックしている。
// AppBundle\EventListener\RedirectToPreferredLocaleListener public function onKernelRequest(GetResponseEvent $event)
サービスとして登録されているか確認。
# /app/config/service.yml app.redirect_to_preferred_locale_listener: class: AppBundle\EventListener\RedirectToPreferredLocaleListener arguments: ['@router', '%app_locales%', '%locale%'] tags: - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }
イベントのフックにはListenerとSubscriberを使う方法があるみたい。 ドキュメントによると、
- Subscriberはイベントに関する知識をクラスではなく、サービス定義に集約できるので、再利用性に優れている。(Symfony内部ではこっちを使っている)
- ListenerはバンドルごとにON/OFFの切り替え設定ができるので、柔軟性に優れている。
ユーザーの権限チェックとかアプリ全体で使うようなチェックはSubscriberで処理するのが良さそう。