当前位置: 首页 > 后端技术 > PHP

用Yii2依赖注入简化开发

时间:2023-03-29 20:00:37 PHP

本文代码https://github.com/xialeistudio/yii2-di-demo什么是依赖注入(DI)?对象是由框架创建的,而不是由程序员通过new创建的。它的含义几乎与IoC相同。为什么依赖注入?解耦。调用者不再通过new操作符实例化被调用对象,而是在框架(IoC容器)创建后注入。调用者和被调用者之间的依赖关系被解除。促进面向接口的编程。我个人认为OOP编程中最重要的就是面向接口(abstract-oriented)编程。因为第一步,调用者只需要依赖接口类型而不是实现类型,提高了程序的可扩展性。Yii2的依赖注入Yii2通过yiidiContainer提供DI容器特性。arams.php';$db=需要__DIR__。'/db.php';$config=['id'=>'basic','basePath'=>dirname(__DIR__),'bootstrap'=>['log'],'aliases'=>['@bower'=>'@vendor/bower-asset','@npm'=>'@vendor/npm-asset',],'container'=>['定义'=>[UserService::class=>UserServiceImpl::class]],'components'=>['request'=>[//!!!在下面插入一个密钥(如果它是空的)——这是cookie验证所需要的'cookieValidationKey'=>'0xGrStOOZE2oXxNNiu-o2eYovJ_Ia1Dk',],'response'=>['format'=>'json'],'errorHandler'=>['errorAction'=>'site/error',],'urlManager'=>['enablePrettyUrl'=>true,'showScriptName'=>false,'rules'=>[],],],];如果(是II_ENV_DEV){//'dev'环境的配置调整$config['bootstrap'][]='debug';$config['modules']['debug']=['class'=>'yii\debug\Module',//如果您不是从本地主机连接,请取消注释以下内容以添加您的IP。//'allowedIPs'=>['127.0.0.1','::1'],];$config['bootstrap'][]='gii';$config['modules']['gii']=['class'=>'yii\gii\Module',//如果您不是从本地主机连接,请取消注释以下内容以添加您的IP。//'allowedIPs'=>['127.0.0.1','::1'],];}return$config;添加控制器appcontrollersUserController用户服务=$用户服务;父母::__构造($id,$module,$config);}publicfunctionactionShow($id){$user=$this->userService->show($id);if(empty($user)){thrownewNotFoundHttpException('用户不存在');}返回$用户;}publicfunctionactionAll(){return$this->userService->all();}}运行测试服务器./yiiserve/index访问用户列表接口http://localhost:8080/user/all[{"id":1,"name":"xialei"},{"id":2,"name":"zhangsan"}]访问查看用户界面http://localhost:8080/user/show?id=1{"id":1,"name":"xialei"}写在最后可以看到,Yii2自带的IoC容器在使用上还是很方便的。我观察到Yii配置比编码好。基本上,Yii组件可以在配置文件中配置,无需手动编码。灵活使用DI可以让我们摆脱依赖,专注于业务逻辑。当然,业务逻辑的组织也是一个很大的研究课题。有兴趣的可以看看DDD(领域驱动设计)