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');
     
    }
     
    }
  • 相关阅读:
    直方图均衡化
    minMaxLoc()
    opencv的掩膜案例
    【人脸检测——基于机器学习4】HOG特征
    【人脸识别——Dlib学习2】Face Landmark Detection
    【细碎知识2】sys.argv[]和format的学习
    【人脸检测——Dlib学习1】Face_detector_example
    【细碎知识1】io.imread和cv2.imread的区别
    【人脸检测——基于机器学习3】AdaBoost算法
    【人脸检测——基于机器学习2】Haar特性
  • 原文地址:https://www.cnblogs.com/brady-wang/p/10537294.html
Copyright © 2011-2022 走看看