Repository navigation
v1.7.0
FastForward Container v1.7.0 adds static container composition and corrects service-provider extension resolution.
Container composition
Use ContainerFactory::create(...$initializers) as an alternative to container(...). The helper delegates to the same implementation. Each call creates a fresh aggregate, provider adapters, and autowiring container, while supplied PSR-11 container objects are reused.
Unknown initializer class names and constructed objects that implement none of the supported initializer contracts raise InvalidArgumentException. Optional nested-configuration failures retain the existing handling policy.
Service-provider fixes
- Extensions can supply an entry without a factory and receive
nullas the previous value. - Returned extension values replace the previous value, including scalars, arrays, and
null; explicitly declaredvoidextensions preserve the previous value for compatibility. - Successful resolutions cache the final value, including
null. - Inferred concrete-class aliases preserve cached entries and callable factory/extension definitions registered for the same class ID in the provider container.
has()discovers callable factories and extensions without executing them, retaining short-circuit metadata lookup.- Provider discovery and execution failures are wrapped consistently, preserving the original exception. Textual exception codes remain available on that previous exception.
Documentation and maintenance
- Expanded API, onboarding, integration, and provider documentation, with runnable examples for both construction styles.
- Improved test-status publication, documentation reports, and package/archive hygiene since v1.6.0.
The delivery includes 109 tests and 264 assertions with 100% source coverage, validated on PHP 8.3, 8.4, and 8.5. The PHP requirement remains ^8.3.
The incremental ContainerBuilder proposal is tracked separately in #13. Transient lifetime design remains open in #6.
Changelog: CHANGELOG.md
Full changelog: v1.6.0...v1.7.0