Skip to content

Migrate core components resolution to DI-first approach and PSR complianceΒ #20574

@mtangoo

Description

@mtangoo

Problem

Currently, core application components such as log, view, formatter, i18n, urlManager, assetManager, and security are resolved via a legacy coreComponents array in framework/base/Application.php. This tightly couples the framework to specific implementations and limits interoperability with Yii3 and PSR-compliant components.

Proposal

  • Refactor the resolution of these core components to use the Dependency Injection (DI) container as the primary mechanism.
  • Where possible, define interfaces (preferably from the relevant PSRs) for these components.
  • For components covered by PSRs, implement compatibility layers and/or adapters so Yii2 can work with PSR-compliant service contracts.
  • During component resolution, attempt to retrieve the component from DI first. If not found, fall back to the existing coreComponents (legacy) approach for backward compatibility.
  • This enables developers to override core components via DI and facilitates integration with Yii3 and external (e.g. PSR) components.

Benefits

  • Moves Yii2 closer to Yii3's architecture and easier migration path.
  • Enables use of Yii3 (and other PSR-compatible) components in Yii2 apps.
  • Reduces coupling and increases developer flexibility.

Example Migration Path

  1. Identify all core components in coreComponents().
  2. For each, check for suitable PSR interface (e.g., PSR-3 for logging, PSR-16 for caching, PSR-7 for HTTP, etc). Create interfaces if none exist.
  3. Refactor component resolution logic to:
    • Query the DI container first.
    • If not found, fall back to coreComponents array as currently implemented.
  4. Add documentation and migration notes for developers.

Metadata

Metadata

Assignees

Labels

22Yii 2.2dependenciesPull requests that update a dependency filehelp wanted

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions