zoukankan      html  css  js  c++  java
  • 简单理解laravel框架中的服务容器,服务提供者以及怎样调用服务

    laravel被称为最优雅的框架,最近正在学习中,对于用惯了thinkphp、ci框架的人来说,服务容器。服务提供者,依赖注入这些概念简直是一脸懵逼。我花了些时间梳理了一下,也不敢确定自己说的是对的,如果有错误的地方还请多多包涵。我尽量把问题说的简单易懂,希望能对通在学laravel的人有起到帮助作用
    一、服务容器, 服务容器顾名思义是指装载服务事务的容器,我的理解就是一个类,这个类称它为容器,这个类下面的方法称它为服务
    example:
    我创建一个服务容器我在app下建一个文件夹Test、创建文件TestTestService.php作为服务容器
    <?php
    namespace AppTest;
    class TestService{
    //这里我写一个服务方法,以被别的地方来调用
    public function callme($say){
    echo $say;
    }
    }
    二、服务提供者服务提供者,就是提供服务的人。注意前面提到的服务容器是用来装载服务的,而服务提供者是用来提供服务的。我举个例子吧,把服务比喻成菜肴,而服务容器就是盛装菜肴的器皿,而服务提供者就是上菜的服务员。顾客(调用服务的地方)想要上什么菜(服务),需要通过服务员(服务提供者)传递。
    example:
    我创建一个服务提供者,在providers目录下创建服务提供者TestServiceProvider.php,注意:服务提供者需要在config/app.php里面的providers数组里面注册
    <?php
     
    namespace AppProviders;
     
    use IlluminateSupportServiceProvider;
    use AppTestTestService;
    class TestServiceProvider extends ServiceProvider
    {
     
    public function boot()
    {
    //
    }
     
    public function register()
    {
    //单例实例化服务容器Test/TestService.php
    $this->app->singleton('test',function(){
    return new TestService();
    });
    }
    }
    三、在一个控制器里面调用服务实例
    <?php
    namespace AppHttpControllers;
    use AppTestTestService;
    use AppHttpControllersController;
     
    class TestController extends Controller
    {
    //在构造函数中依赖注入
    function __construct(TestService $test){
    $this->test=$test;
    //此时的的 $this->test相当于实例化了服务容器:TestService
    }
    public function get_index()
    {
    //调用服务容器TestService下的callme方法
    $this->test->callme('hello');
     
    }
     
    }
  • 相关阅读:
    服务器的Redis连接不上解决方案
    给大家推荐一个很好的自学网站
    简单说下HashMap的实现原理
    LinkedList源码解析
    你要了解的jvm
    单例设计
    百度编辑器删除旧的图片
    Ueditor 单图、多图、视频、附件的上传及在线管理总结
    上传新图片删除旧图片
    webapi发布IIS时出现500.19错误:不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的(overrideModeDefault="Deny")或者是通过包含overrideModeDefault="Deny"....
  • 原文地址:https://www.cnblogs.com/brady-wang/p/10537294.html
Copyright © 2011-2022 走看看