URL parameters now come exclusively from context. The engine preserves every body field, including fields whose names match URL placeholders.
Breaking change and migration
For path: /employees/{id}, pass the identifier explicitly in context:
use IntegrationEngine\Core\Contract\Action\DefaultActionContext;
$engine->send(
actionName: UpdateEmployeeAction::getName(),
context: DefaultActionContext::create(['id' => 42]),
body: UpdateEmployeeBody::create(['name' => 'New Name']),
);This sends PUT /employees/42 with {"name":"New Name"}. If the API also requires id in the payload, include it explicitly in the body; it will be preserved. A missing context parameter fails before HTTP even when the body contains a matching field.
Documentation and migration examples have been updated. The demo already supplies its URL parameters through context.
Other changes since v8.0.4
- Improved landing-page mobile layout and prevented horizontal overflow.
- Fixed contract-test path repository version resolution.
Validation
make qa: code style, static analysis and 871 tests (2,461 assertions) passed.- HTTP regression tests verify payload preservation and rejection of missing context parameters before sending a request.