yiisoft/yii2

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

開放

#20,574 建立於 2025年10月2日

 (1 則留言) (2 個反應) (1 位負責人)PHP (6,784 個分叉)batch import
22dependencieshelp wanted

倉庫指標

星標
 (14,302 顆星)
PR 合併指標
 (PR 指標待抓取)

描述

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.

貢獻者指南