公式パッケージ · フレームワーク

Mercure hub なしで Symfony UX Turbo Streams

Doctrine の #[Broadcast] エンティティ、Turbo Streams、Symfony Messenger が Hibira 経由で更新を送り、ブラウザは WebSocket で受け取ります。Mercure hub の運用は不要です。

  • #[Broadcast]、turbo_stream_listen()、turbo_stream_from() は Mercure と同じように使え、トランスポート名は hibira です。
  • 更新はすべて Messenger のメッセージなので、非同期ワーカーに送らせればネットワークが遅くてもリクエストは遅くなりません。
  • 独自のプライベート/プレゼンスチャンネルへの署名、Webhook の検証、プッシュ通知トークンの発行もできます。Symfony 6.4、7、8、UX Turbo 2 と 3 に対応。

サインインすると、コード例にご自身のクラスターホストが入ります。 サインイン

  1. インストール

    composer require hibira-io/symfony-bundle
    
    # .env.local
    HIBIRA_APP_ID=YOUR_APP_ID
    HIBIRA_APP_KEY=YOUR_APP_KEY
    HIBIRA_APP_SECRET=YOUR_APP_SECRET
    
    php bin/console hibira:check
  2. 設定する

    use Symfony\UX\Turbo\Attribute\Broadcast;
    
    #[ORM\Entity]
    #[Broadcast]
    class Message
    {
        // ...
    }
  3. 使う

    {# templates/broadcast/Message.stream.html.twig #}
    {% block create %}
    <turbo-stream action="append" target="messages">
      <template>{{ include('message/_message.html.twig', { message: entity }) }}</template>
    </turbo-stream>
    {% endblock %}
    
    {# the page #}
    <ul id="messages" {{ turbo_stream_listen('App\\Entity\\Message') }}></ul>

始める前に

  • アプリのシークレットは、アプリの作成時とシークレットのローテーション時に一度だけ表示されます。サーバーにだけ置き、ブラウザやゲームのビルドには入れないでください。
  • Free プランでは、ページを読み込むすべてのオリジンをアプリの許可オリジンに登録してください(開発中は http://localhost:3000、その後は自分のドメイン)。"*" は有料プランで使えます。

ダッシュボードのアプリキーを使ってください。シークレットはサーバー側だけに置きます。チャンネル、イベント、認可エンドポイントは Pusher とまったく同じように動作します。 無料でアカウントを作成 →