Symfony Best Practice - 実践編 Chapter5-4-

前回

hanahirodev.hatenablog.com

いじった結果は随時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で処理するのが良さそう。