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

    laravel被称为最优雅的框架,最近正在学习中,对于用惯了thinkphp、ci框架的人来说,服务容器。服务提供者,依赖注入这些概念简直是一脸懵逼。我花了些时间梳理了一下,也不敢确定自己说的是对的,如果有错误的地方还请多多包涵。百牛信息技术bainiu.ltd整理发布于博客园。我尽量把问题说的简单易懂,希望能对通在学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');
     
    }
     
    }
  • 相关阅读:
    【小5聊】腾讯位置服务之小程序简单使用以及显示附近WC步行路线
    前端面试——JS进阶
    【小5聊】腾讯位置服务之小程序简单使用以及显示附近WC步行路线
    Node学习(三)
    HTML5 知识点总结(六)
    uniapp集成unipush监听推送,处理兼容ios在线无法收到推送通知问题以及安卓推送处理
    记一些CSS属性总结(二)
    Python getattr() 函数
    python中的__init__和__new__的区别
    干货报告:八大科技领域,280 页,InfoQ《2020 中国技术发展白皮书》开放下载...
  • 原文地址:https://www.cnblogs.com/bainiu/p/7582551.html
Copyright © 2011-2022 走看看