[TwigComponents] Communication between two component on server-side #2238
Replies: 13 comments
-
You can simply use the emit function from ComponentToolsTrait https://symfony.com/bundles/ux-live-component/current/index.html#communication-between-components-emitting-events |
Beta Was this translation helpful? Give feedback.
-
Well,
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 ? |
Beta Was this translation helpful? Give feedback.
-
I talking about classic twigComponent, not live component. |
Beta Was this translation helpful? Give feedback.
-
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 ? |
Beta Was this translation helpful? Give feedback.
-
I want change favicon based on status from other components. |
Beta Was this translation helpful? Give feedback.
-
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 ? |
Beta Was this translation helpful? Give feedback.
-
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. |
Beta Was this translation helpful? Give feedback.
-
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. |
Beta Was this translation helpful? Give feedback.
-
Yes, I want use symfony EventDispatcher! |
Beta Was this translation helpful? Give feedback.
-
A Twig component cannot receive event, so no. |
Beta Was this translation helpful? Give feedback.
-
Hi, I have again same problem in another project. When I update RestaurantGrid with ajax, then count us updated corectly, but On first page load is not work, because there is not layer to send ajax request to load component. How I can do some like this? take restaurant count from one component and render it in another component? I dont want make two same queries in two components. |
Beta Was this translation helpful? Give feedback.
-
You could potentially reuse the same RestaurantSearch service across both components, storing relevant data within the service instance to avoid duplicate queries. Alternatively, depending on the nature of your query (e.g., Doctrine ORM entities, external API, etc.), you could implement a caching mechanism within the service to optimize performance. Another approach might be introducing a third component, such as a ViewController, that listens to changes in the filters, computes the search results based on those filters, and sends the data to the view. This data would include both the result count and the grid. In this scenario, the RestaurantGrid could be a simple TwigComponent without state (which I would also recommend for your RestaurantCount, as its sole responsibility seems to be displaying the number of results). |
Beta Was this translation helpful? Give feedback.
-
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
Beta Was this translation helpful? Give feedback.
All reactions