1212namespace Symfony \UX \Turbo \Bridge \Mercure ;
1313
1414use Symfony \Component \Mercure \HubInterface ;
15+ use Symfony \Component \Mercure \Twig \MercureExtension ;
1516use Symfony \UX \StimulusBundle \Helper \StimulusHelper ;
1617use Symfony \UX \Turbo \Broadcaster \IdAccessor ;
17- use Symfony \UX \Turbo \Twig \TurboStreamListenRendererInterface ;
18+ use Symfony \UX \Turbo \Twig \TurboStreamListenRendererWithOptionsInterface ;
1819use Symfony \WebpackEncoreBundle \Twig \StimulusTwigExtension ;
1920use Twig \Environment ;
21+ use Twig \Error \RuntimeError ;
2022
2123/**
2224 * Renders the attributes to load the "mercure-turbo-stream" controller.
2325 *
2426 * @author Kévin Dunglas <kevin@dunglas.fr>
2527 */
26- final class TurboStreamListenRenderer implements TurboStreamListenRendererInterface
28+ final class TurboStreamListenRenderer implements TurboStreamListenRendererWithOptionsInterface
2729{
2830 private StimulusHelper $ stimulusHelper ;
2931
3032 public function __construct (
3133 private HubInterface $ hub ,
3234 StimulusHelper |StimulusTwigExtension $ stimulus ,
3335 private IdAccessor $ idAccessor ,
36+ private Environment $ twig ,
3437 ) {
3538 if ($ stimulus instanceof StimulusTwigExtension) {
3639 trigger_deprecation ('symfony/ux-turbo ' , '2.9 ' , 'Passing an instance of "%s" as second argument of "%s" is deprecated, pass an instance of "%s" instead. ' , StimulusTwigExtension::class, __CLASS__ , StimulusHelper::class);
@@ -42,8 +45,12 @@ public function __construct(
4245 $ this ->stimulusHelper = $ stimulus ;
4346 }
4447
45- public function renderTurboStreamListen (Environment $ env , $ topic ): string
48+ public function renderTurboStreamListen (Environment $ env , $ topic /* array $eventSourceOptions = [] */ ): string
4649 {
50+ if (\func_num_args () > 2 ) {
51+ $ eventSourceOptions = func_get_arg (2 );
52+ }
53+
4754 $ topics = $ topic instanceof TopicSet
4855 ? array_map ($ this ->resolveTopic (...), $ topic ->getTopics ())
4956 : [$ this ->resolveTopic ($ topic )];
@@ -55,6 +62,18 @@ public function renderTurboStreamListen(Environment $env, $topic): string
5562 $ controllerAttributes ['topic ' ] = current ($ topics );
5663 }
5764
65+ if (isset ($ eventSourceOptions )) {
66+ try {
67+ $ mercure = $ this ->twig ->getExtension (MercureExtension::class);
68+ $ mercure ->mercure ($ topics , $ eventSourceOptions );
69+
70+ if (isset ($ eventSourceOptions ['withCredentials ' ])) {
71+ $ controllerAttributes ['withCredentials ' ] = $ eventSourceOptions ['withCredentials ' ];
72+ }
73+ } catch (RuntimeError $ e ) {
74+ }
75+ }
76+
5877 $ stimulusAttributes = $ this ->stimulusHelper ->createStimulusAttributes ();
5978 $ stimulusAttributes ->addController (
6079 'symfony/ux-turbo/mercure-turbo-stream ' ,
0 commit comments