Implements PLAN.md §8's third makers-table row. Single-command path
from a PHP domain event to a QML signal-handler:
- src/Event/<Name>Event.php — readonly value object stub
- src/EventSubscriber/<Name>Subscriber.php — listens to the event,
republishes via PublisherInterface on app://event/<kebab-name>
with op:"event"
- {qml_path}/<Name>EventHandler.qml — MercureClient bound to the
topic, re-emits the envelope's data as a typed signal
Stub uses an `array $payload` field so the user can substitute typed
properties for whatever shape they need. Subscriber example uses the
PublisherInterface contract from chunk 1; QML stub uses MercureClient
+ BackendConnection both already shipping.
Wired into services.yaml's when@dev block (autoconfigure picks up
maker.command tag, same pattern as existing BridgeResourceMaker /
BridgeWindowMaker). Three new snapshot baselines plus a snapshot
runner extension exercising the new maker against the same Todo /
TodoCompleted naming the existing baselines use.
End-to-end verified locally: maker output matches baselines, dev
container compiles, listing make:bridge:* shows the new command.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
32 lines
887 B
QML
32 lines
887 B
QML
// Auto-generated by `bin/console make:bridge:event TodoCompleted`.
|
|
// Listens for `app://event/todo-completed` envelopes published by
|
|
// TodoCompletedSubscriber and re-emits them as a typed QML signal.
|
|
//
|
|
// Drop into a parent component and connect:
|
|
//
|
|
// TodoCompletedEventHandler {
|
|
// onTodoCompleted: function(payload) { console.log("hi", payload) }
|
|
// }
|
|
|
|
import QtQuick
|
|
import PhpQml.Bridge
|
|
|
|
Item {
|
|
id: handler
|
|
|
|
/** Emitted when the bridge publishes app://event/todo-completed. */
|
|
signal todoCompleted(var payload)
|
|
|
|
MercureClient {
|
|
baseUrl: BackendConnection.url
|
|
token: BackendConnection.token
|
|
topics: ["app://event/todo-completed"]
|
|
|
|
onUpdate: function(topic, envelope) {
|
|
if (topic === "app://event/todo-completed") {
|
|
handler.todoCompleted(envelope.data)
|
|
}
|
|
}
|
|
}
|
|
}
|