Skip to content

v1.7.0

Choose a tag to compare

@coisa coisa released this 12 Oct 02:29
7f3f13d

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 null as the previous value.
  • Returned extension values replace the previous value, including scalars, arrays, and null; explicitly declared void extensions 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