symfony / ux

Symfony UX initiative: a JavaScript ecosystem for Symfony

Home Page:https://ux.symfony.com/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

[TwigComponents] Communication between two component on server-side

tito10047 opened this issue · comments

Hi,
is it possible to communicate between two components on server-side without emitting a JavaScript event? I have two independent components and I need to send an event from one component to the other.

I need to emit it when the page is rendered without user input.

I need exactly this:
When one (one from many) component is rendered, its loaded from database some status. In some algoritmus is calculated and detected if is going something wrong.
In second compoent I want detect if in some components of this page is going wrong and if yes change icon of its element.

Any idea how I can do this?
Thanks

Well,

without emitting a JavaScript event

If you meant "emitting a Javascript myself" @WebMamba is 100% right to say "events" are the way to communicate between instances.

If you meant "with no event beeing dispatched or passing by the front well... it's not possible. As state holders, live components are in the DOM browsers and thus they will need to pass by the Live Controller at a certain point.

Finally, if you meant "between two components that do not know anything about the other, but as a developer i in fact do", then you maybe could use classic PHP Event dispatch ?

I talking about classic twigComponent, not live component.
Yes, its third scenario.
But how I can listen event in one component thats dispatched in other component? that is not posible in symfony, not? because listener must be self services, not twig components.

You are right,

I'd also say personnaly that maybe they even should not do this, as component are often more "isolated context" than statefull scopes.

What is your real use case there ? Maybe we can suggest alternative solutions ?

I want change favicon based on status from other components.
I have 2 types of component that change page status in 10 instances. so in page is 20 components. I want from some this component call FaviconComponent for change favicon on page.
This 20 instances do some calculations and result is some status o fomething. if one status is danger, i want change favicon

You could do the opposite: all your livecomponents triggers some event when they compute/change status.

And another one listen to these events and refresh the favicon.

What do you think ?

Yes, this is exactly what I want. But I did not use livecomponent. only normal twig component.

Now Im changed everything to livecomponent and, of corse, its working. But question from root comment is not answered. How to send event in normnal twig component.

Twig components have no state, they are destroyed immediately after render, so they cannot "send" events to the backend, receive other ones, etc etc as no one could answer or use them.

You could use custom Event from Symfony EventDispatcher dispatched from your TwigComponent as I said, but not sure you'd fine exactly what you want there.

So, i think i do have already answered in fact. Nicely and trying to help as much as possible.

Yes, I want use symfony EventDispatcher!
But I dont know how. How I can listen event in twig component.
I need send symfony event from one component to another, but I think this is not possible.

A Twig component cannot receive event, so no.

Thanks