热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Laravel——服务注入实战案例

最近小侠在和公司的小伙伴奋斗在开发的最前线。什么是最前线?大概中秋我们团队就只休息了24号,其他时间?抱歉乖乖地完成项目和赶进度吧。前些天

        最近小侠在和公司的小伙伴奋斗在开发的最前线。什么是最前线?大概中秋我们团队就只休息了24号,其他时间?抱歉乖乖地完成项目和赶进度吧。前些天,在关注项目进度的时候看到了同事在看laravel 的服务提供的相关问题,于是赶紧去八卦打听(ps:说白了就是八卦下看看有什么新技术可以看看,毕竟不断学习才是我们根本的进步捷径)。原来是公司,同事负责的模块可能需要在不同的地方进行调用,而每一次去实例化或者去引入总觉得好不习惯,所以就看看有没有其他好的捷径可以优化这部分的逻辑。于是就找到了服务提供的这个部分。

       由于小伙伴没能很好理解和消化这部分所以,作为组长只能身先士卒,撸起袖子加油干。终于在学院君,强大的文档说明下硬是把这块猪骨头给啃下了。在开始正文之前有几个事情需要各位吃瓜的群众好好理解一下先要不然根本没法往下看,因为那些东西都是涉及了laravel的底层知识部分,虽然不需要面面俱到,但起码还是要大概了解是什么的。

什么是容器?

       服务容器是用来管理类依赖与运行依赖注入的工具。Laravel框架中就是使用服务容器来实现 “ 控制反转 ” 和 “依赖注入 ”。

什么是控制反转(IoC)和依赖注入(DI)

       控制反转(IoC) 就是说把创建对象的“ 控制权” 进行转移,以前创建对象的主动权和创建时机是由自己把控的,而现在这种权力转移到第三方,也就是 Laravel 中的容器。

       依赖注入(DI)则是帮助容器实现在运行中动态的为对象提供提依赖的资源

什么是门面?

       简单说来就是模拟一个类,提供一个静态魔术方法__callStatic,并将该静态方法映射到真正的方法上。

相关文章链接

Laravel 服务容器实例教程 —— 深入理解控制反转(IoC)和依赖注入(DI)


下面我们就直接用代码说话吧!

(1)我们首先创建一个需要绑定到服务容器的Test类:

{public function callMe($controller){return 'Call Me From TestServiceProvider In '.$controller;}
}

这个Test类其实就是你需要注入的服务的逻辑代码,其实这里小侠是简化了一部分,因为正常的情况下,我们还是需要用到契约的,(契约其实说白了就是类的接口)但是为了方面说明与学习我们当前的例子就没有把契约引入。有兴趣的道友可以自己去补充这方面的知识。

(2)通过laravel 自带的服务注入命令,为当前的服务生成一个新的服务注入

php artisan make:provider TestServiceProvider

该命令会在app/Providers目录下生成一个TestServiceProvider.php文件,我们编辑该文件内容如下:

use App\Services\TestService;//需要注入的服务的路径
class TestServiceProvider extends ServiceProvider
{/*** Bootstrap the application services.** @return void*/public function boot(){//}/*** Register the application services.** @return void*/public function register(){//使用singleton绑定单例,其中test名字适用于绑定的别名$this->app->singleton('test',function(){return new TestService();});}
}

绑定容器的方法比较,想了解更多可以参考-[ Laravel 5.5 文档 ] 底层原理 —— 服务容器

(3)注册服务提供者

        定义完服务提供者类后,接下来我们需要将该服务提供者注册到应用中,很简单,只需将该类追加到配置文件config/app.phpproviders数组中即可:

'providers' => [//其他服务提供者App\Providers\TestServiceProvider::class,
],

(4)为对应的方法创建对应的门面

{protected static function getFacadeAccessor(){return 'test'; //其中里面的test需要返回的是你在服务里绑定的名称}
}

再然后需要到配置文件config/app.php中注册门面类别名:

'aliases' => [...//其他门面类别名映射'TestClass' => App\Facades\TestClass::class,
],

最后在需要调用服务的地方使用对应的门面进行调用即可

use App\Http\Controllers\Controller;
use App;
use TestClass;
class IndexController extends Controller
{
public function index(){$result=TestClass::callMe('TestController');dump($result);
}}

至此,关于laravel的服务注入的实例教程已经全部介绍完毕,感谢各位道友的支持。如果你觉得这文章对你有帮助,希望你也可以点击下关注吧~




推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了在ASP中创建RazorFunctions.cshtml文件时出现的问题,即ASP.global_asax不存在于命名空间ASP中。文章提供了解决该问题的代码示例,并详细解释了代码中涉及的关键概念,如HttpContext、Request和RouteData等。通过阅读本文,读者可以了解如何解决该问题并理解相关的ASP概念。 ... [详细]
  • ps:写的第一个,不足之处,欢迎拍砖---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说模型中的toArraytoJsonsetAtt ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • SpringBoot简单日志配置
     在生产环境中,只打印error级别的错误,在测试环境中,可以调成debugapplication.properties文件##默认使用logbacklogging.level.r ... [详细]
  • 本文介绍了一个Magento模块,其主要功能是实现前台用户利用表单给管理员发送邮件。通过阅读该模块的代码,可以了解到一些有关Magento的细节,例如如何获取系统标签id、如何使用Magento默认的提示信息以及如何使用smtp服务等。文章还提到了安装SMTP Pro插件的方法,并给出了前台页面的代码示例。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • 本文介绍了在使用Laravel和sqlsrv连接到SQL Server 2016时,如何在插入查询中使用输出子句,并返回所需的值。同时讨论了使用CreatedOn字段返回最近创建的行的解决方法以及使用Eloquent模型创建后,值正确插入数据库但没有返回uniqueidentifier字段的问题。最后给出了一个示例代码。 ... [详细]
  • 使用这个技巧要达到的目标:一般来说,模型和控制器你都不会有相同的类名字。让我先创建一个取名为post的model。classPostextendsModel{}现在 ... [详细]
author-avatar
谁是我我2010
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有