Standalone Composer/CMake project under examples/todo/ derived from the
skeleton, demonstrating every Phase 3 architectural primitive in a
non-trivial app. All cross-side wiring is maker-generated; no
handwritten bridge glue.
Generated and customised:
- src/Entity/Todo.php — make:bridge:resource Todo (UUIDv7 id)
- src/Controller/TodoController.php — make:bridge:resource Todo (CRUD)
- src/Controller/MarkAllDoneController.php — make:bridge:command
MarkAllDone, body filled in to flip done=true on every row
- qml/TodoList.qml — make:bridge:resource Todo (starter ListView)
- qml/TodoWindow.qml — make:bridge:window Todo, body customised to
embed a read-only mirror of the same ReactiveListModel
The Phase 1 ping demo is dropped from this app — it doesn't fit the
todo flow and nothing in Main.qml references it.
Main.qml is the real list UI:
- Add input + button (POST /api/todos with optimistic-friendly key).
- Per-row CheckBox + delete button (PATCH/DELETE via
todoModel.invoke() with `pending` role driving opacity).
- "Mark all done" button (POST /api/mark-all-done).
- "Open second window" button (Component { TodoWindow {} } pattern).
Build / run delegated to the same Makefile shape as the skeleton, with
SCRIPT_DIR/QT_BIN updated for the renamed binary (build/qml/todo).
composer.json's path repo points at ../../../framework/php (one level
deeper than the skeleton's path repo).
Verified end-to-end with offscreen QPA: POST/PATCH/DELETE on /api/todos
all round-trip, /api/mark-all-done flips every row, Mercure dual-
publishes on every change. Clean shutdown.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
47 lines
1.1 KiB
JSON
47 lines
1.1 KiB
JSON
{
|
|
"type": "project",
|
|
"license": "proprietary",
|
|
"minimum-stability": "stable",
|
|
"require": {
|
|
"php": "^8.3",
|
|
"symfony/framework-bundle": "^8.0",
|
|
"symfony/runtime": "^8.0",
|
|
"symfony/dotenv": "^8.0",
|
|
"symfony/yaml": "^8.0",
|
|
"symfony/security-bundle": "^8.0",
|
|
"symfony/mercure-bundle": "^0.4",
|
|
"symfony/uid": "^8.0",
|
|
"doctrine/orm": "^3.0",
|
|
"doctrine/doctrine-bundle": "^3.0",
|
|
"doctrine/doctrine-migrations-bundle": "^4.0",
|
|
"php-qml/bridge": "@dev"
|
|
},
|
|
"require-dev": {
|
|
"symfony/maker-bundle": "^1.62"
|
|
},
|
|
"autoload": {
|
|
"psr-4": {
|
|
"App\\": "src/"
|
|
}
|
|
},
|
|
"config": {
|
|
"allow-plugins": {
|
|
"symfony/runtime": true
|
|
}
|
|
},
|
|
"extra": {
|
|
"runtime": {
|
|
"class": "Symfony\\Component\\Runtime\\SymfonyRuntime"
|
|
}
|
|
},
|
|
"repositories": [
|
|
{
|
|
"type": "path",
|
|
"url": "../../../framework/php",
|
|
"options": {
|
|
"symlink": true
|
|
}
|
|
}
|
|
]
|
|
}
|