Yii框架依赖注入在2.0 3.0里怎么正确使用

星夢妙者

星夢妙者

2026-08-01

324人浏览

原创

yii 3.0 默认以 di 容器为核心,自动解析依赖并支持构造注入;yii 2.0 以服务定位器为主,di 需手动启用且不支持自动构造注入,组件须显式注册并手动传参。

yii框架依赖注入在2.0 3.0里怎么正确使用

Yii 2.0 和 Yii 3.0 的依赖注入(DI)机制差异显著,不能混用或套用同一套写法。核心区别在于:Yii 2.0 默认不启用 DI 容器接管对象创建,而 Yii 3.0 将 DI 容器作为应用启动和对象解析的**默认中枢**。

Yii 2.0:服务定位器为主,DI 容器需手动介入

Yii 2.0 中 Yii::$app 是服务定位器(Service Locator),不是 DI 容器。它只认你显式注册在 components 配置里的组件,且不解析构造函数参数。

  • 要让自定义类(如 OrderService)被 Yii::$app->get('orderService') 找到,必须在 config/web.phpcomponents 数组里声明:
    'orderService' => ['class' => 'app\services\OrderService']
  • 若该类构造函数需要 DbConnectionCacheInterface,服务定位器不会自动提供——你得手动补全:
    'orderService' => ['class' => 'app\services\OrderService', 'db' => Yii::$app->db, 'cache' => Yii::$app->cache]
  • 真要用自动构造注入,得单独实例化 yii\di\Container
    $container = new \yii\di\Container();<br>$container->set('app\interfaces\OrderInterface', 'app\services\OrderService');<br>$service = $container->get('app\interfaces\OrderInterface');
  • 控制器不支持构造函数注入,因为框架用 new $class() 创建;需通过自定义基类 + 容器配置(__construct() 参数列表显式声明)来绕过限制

Yii 3.0:DI 容器是默认引擎,服务定位器退居辅助

Yii 3.0 彻底转向以 yii\di\Container 为核心。应用启动时即初始化全局容器,所有对象(包括控制器、中间件、命令)都由容器创建并自动解析依赖。

Yii Framework 2.0.51
Yii Framework 2.0.51

下载 Yii Framework 2.0.51 官方 Basic 应用模板,查看 Composer 安装方式、版本信息与开发文档。

下载
  • 无需在配置中预先注册每个组件;只要类已存在、类型提示清晰,容器就能自动构造:
    class UserController { public function __construct(private UserService $userService) {} }
    框架会自动注入 UserService 实例
  • 接口绑定直接在应用启动时完成(如 config/common.php):
    'container' => [ 'definitions' => [ UserInterface::class => DbUserRepository::class ] ]
  • 控制器、命令、中间件等均支持构造注入,不再需要基类封装或手动传参
  • 服务定位器(Yii::$app)仍存在,但主要用作快捷访问已注册的“核心服务”(如 db, cache),不再是依赖管理主干

跨版本迁移关键提醒

从 Yii 2.0 升级到 3.0 时,以下习惯必须调整:

  • 删掉 components 中大量手工配置的 service 类——改用容器定义或自动发现
  • 把原来写在 init()beforeAction() 里的依赖赋值逻辑,移到构造函数中
  • 避免在业务类中调用 Yii::$app->get() 获取服务;优先用构造注入,保证可测试性
  • 注意 yii\di\Container 在 3.0 中支持作用域(scoped)、工厂回调、条件绑定等高级特性,2.0 版本功能较弱

不复杂但容易忽略:版本决定架构思路。2.0 是“注册后查找”,3.0 是“声明即可用”。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

yii yii框架

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
PHP Yii框架专题
PHP Yii框架专题

本专题专注于PHP主流框架Yii的应用,系统讲解MVC架构、路由机制、数据库操作、表单处理、安全验证与RESTful API 开发等核心内容。通过电商网站、后台管理系统与内容管理平台等实战项目,帮助学员快速掌握Yii框架的开发技巧与实战经验。

2025.09.04

848

22

火山引擎域名备案流程详解
火山引擎域名备案流程详解

火山引擎域名备案适合需要在火山引擎云服务器、对象存储、CDN或网站服务上绑定域名的用户参考。本专题整理备案入口、账号实名认证、备案类型选择、主体信息填写、网站信息提交、资料上传、初审核验、管局审核和备案失败排查,帮助用户完成网站上线前的备案流程。

2026.08.04

0

10

火山引擎DNS解析配置步骤
火山引擎DNS解析配置步骤

使用火山引擎DNS解析网站域名时,需要确认域名已完成管理接入,并正确配置服务器IP、CNAME地址或验证记录。本专题整理域名添加、记录类型选择、TTL设置、解析状态检查、备案和访问测试等流程,适合新手搭建网站时参考。

2026.08.04

0

10

火山引擎对象存储使用教程
火山引擎对象存储使用教程

火山引擎对象存储适合用于网站图片、视频文件、备份数据、静态资源和应用附件管理。本专题整理TOS控制台入口、存储桶创建、地域选择、权限设置、文件上传、访问链接生成、CDN加速、费用查看和常见上传或访问失败问题,帮助用户快速掌握对象存储基础操作。

2026.08.04

1

10

火山引擎云服务器使用教程
火山引擎云服务器使用教程

火山引擎云服务器使用教程适合第一次购买、部署和管理云服务器的用户参考。本专题整理控制台入口、实例创建、地域和配置选择、系统镜像设置、安全组放行、远程连接、网站部署、续费计费和常见连接失败问题,帮助用户快速完成云服务器基础使用流程。

2026.08.04

3

10

火山引擎API Key绑定大模型教程
火山引擎API Key绑定大模型教程

火山引擎API Key怎么绑定大模型适合需要在火山方舟、应用后台、脚本工具或AI编程软件中调用模型的开发者参考。本专题整理控制台服务开通、API Key创建、模型权限检查、模型ID选择、Base URL填写、调用测试和鉴权失败排查,帮助用户完成从密钥到模型调用的配置流程。

2026.08.04

2

10

火山引擎API Key获取教程
火山引擎API Key获取教程

火山引擎API Key适合需要调用火山引擎云服务、AI模型、火山方舟接口或其他开放能力的开发者参考。本专题整理控制台入口、账号认证、服务开通、API Key创建、密钥复制保存、权限检查、调用测试和Key无效等常见问题排查。

2026.08.04

6

10

火山引擎API接入教程
火山引擎API接入教程

火山引擎API接入适合需要在应用、脚本、后台服务或AI工具中调用火山引擎能力的开发者参考。本专题整理控制台入口、服务开通、API Key获取、接口地址配置、请求参数填写、调用测试、权限设置、额度查询和常见接口报错排查。

2026.08.04

6

10

火山引擎DeepSeek API调用教程
火山引擎DeepSeek API调用教程

火山引擎DeepSeek API适合需要在应用、脚本、智能体或AI编程工具中调用DeepSeek模型的开发者参考。本专题整理火山引擎控制台入口、模型服务开通、API Key获取、Base URL配置、模型名称填写、调用测试、额度查询和常见接口报错排查。

2026.08.04

3

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Yii2.0框架开发实战视频教程
Yii2.0框架开发实战视频教程

共22课时 | 9.1万人学习

Yii2中文手册
Yii2中文手册

共0课时 | 0.6万人学习