#安装传送门 安装composer,以及通过composer安装laravel

#讲解使用

服务提供者这个具体表现都是围绕着依赖注入

在根目录config/app.php的providers中的数组中配置

#服务提供者可以理解成,为了能在系统的上下文中能够使用类示例,系统内部封装了反射分析容器中的注册的绑定类名或者别名,进行依赖管理和注入。

比如我需要在全文调用一个log方法,这个方法是用来进行项目中的debug的输出,替换掉普通的echo方法。类似tp3.2的想法会在系统的公共方法中写好,但是laravel基本都是oop所以这种就变成了类的调用的形式。可以在系统上注册一个服务提供者,然后在laravel的生命周期里面可以进行使用。下面是测试示例以及步骤

#先创建一个测试的log类

namespace App\Http\Logic;

class LogLogic
{
public $type = null;
public function __construct($type)
{
$allowType = ['MonogDB','File','Redis'];
if(!in_array($type,$allowType)){
throw new \Exception("can't find driver");
}
$this->type = $type;
} /**
* @param $str
*/
public function log($str){
echo "当前使用的是".$this->type."驱动:{$str}";
} }  

类我们创建好了,当然可以随处调用。但是我们可以通过依赖注入的方式能更加直观调用

接下来我们创建一个服务提供者

php artisan make:provider MlogProvider

在类中的register方法中进行实例化,以及绑定到容器

bind和singleton的区别是,bind是每次都是通过函数返回类的是实例,singleton是通过函数返回已经存在的实例(参照单例)

class MlogProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
//
} /**
* Register the application services.
*
* @return void
*/
public function register()
{
//
$this->app->bind(LogLogic::class, function ($app) {
return new LogLogic(config('mconfig.logDriver'));
});
}
}  

然后我们创建一个配置文件,config/mconfig。

return [
'logDriver'=>'File'
];  

在config/app.php中加入服务提供者

App\Providers\MlogProvider::class,  

在controller中进行测试

<?php

namespace App\Http\Controllers;

use App\Http\Logic\LogLogic;
use Illuminate\Http\Request; class UsersController extends Controller
{
//
public function index(Request $requser,LogLogic $logLogic){
$logLogic->log('hello');
}
}  

然后访问路由:会正常输出

当前使用的是File驱动:hello

接下来我们测试一下单例的绑定

修改服务提供者

public function register()
{
//
$this->app->singleton(LogLogic::class, function ($app) {
return new LogLogic(config('mconfig.logDriver'));
});
}  

我们写入一个逻辑类,这里会去容器中获取LogLogic的实例,然后更改驱动为redis

<?php
/**
* Created by PhpStorm.
* User: xujun
* Date: 2018/3/10
* Time: 14:53
*/ namespace App\Http\Logic; class TestSingletonLogic
{
public function step1(){
//利用app方法创建
$logLogic = resolve(LogLogic::class);
$logLogic->type = 'Redis';
}
}  

修改controller

<?php

namespace App\Http\Controllers;

use App\Http\Logic\LogLogic;
use App\Http\Logic\TestSingletonLogic;
use Illuminate\Http\Request; class UsersController extends Controller
{
//
public function index(Request $requser,LogLogic $logLogic){
$logLogic->log('hello');
//将类型变成MonogDB
$logLogic->type = 'MonogDB';
(new TestSingletonLogic())->step1();
$logLogic->log('laravel'); }
}  

输出结果,说明了容器内的对象是单例。

当前使用的是File驱动:hello当前使用的是Redis驱动:laravel

  

  

 

laravel 服务提供者介绍和使用的更多相关文章

  1. Laravel 服务提供者实例教程 —— 创建 Service Provider 测试实例

    从某种意义上说,服务提供者有点类似HTTP控制器,HTTP控制器用于为相关路由注册提供统一管理,而服务提供者用于为相关服务容器提供统一绑定场所,此外服务提供者还可以做一些初始化启动操作.Laravel ...

  2. laravel 服务提供者

    服务提供者,在laravel里面,其实就是一个工厂类.它最大的作用就是用来进行服务绑定.当我们需要绑定一个或多个服务的时候,可以自定义一个服务提供者,然后把服务绑定的逻辑都放在该类的实现中.在lara ...

  3. php Laravel 框架 介绍及安装

    Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁.富于 ...

  4. laravel服务提供者类说明

    IoC 是将内部设计的类交给系统去控制,但是有些类在初始化的时候,需要制定特定的参数,或者当你需要将实现类绑定到某个接口,这时候就必须对这些依赖进行配置,系统才能正确解析并引用. register 而 ...

  5. Laravel服务/服务提供者/容器/契约和门面

    1.服务是什么? 服务是提供了一些功能的类,比如发送邮件,写日志. 2.Laravel服务提供者是什么? 服务提供者中指明了这个提供者可以提供哪些服务(注册服务),以及服务注册后默认调用一些方法(bo ...

  6. 【php】PHP现代框架代表-Laravel框架核心技术特性

    一.php语言特点及发展现状 1.服务端脚本语言,自由度太大 ,一个业务逻辑可言写在模型里,控制器里,也可以单独封装成一个类,甚至可以嵌入到html里,这样势必会造成混乱,业务逻辑散落在各处,尤其对于 ...

  7. 谈一谈 Laravel 5.5 的 「自动发现」和此刻心情

    看了Taylor Otwell发表的Package Auto-Discovery In Laravel 5.5第一反应是 为啥... 也怪我,在开发之前忘记看5.5的开发代码动态,之前的文章中也提到过 ...

  8. 聊聊 Laravel 5.5 的 「自动发现」

    ThinkSNS是什么? ThinkSNS(简称TS),一款全平台综合性社交系统,目前最新版本为ThinkSNS+.ThinkSNS V4 ThinkSNS[简]. 看了Taylor Otwell发表 ...

  9. laravel门面和服务提供者使用

      关于laravel门面和服务提供者使用的一点见解,门面之词,不足之处,还请多多指教. 在laravel中,我们可能需要用到自己添加的类时,可以建立一个文件夹专门存放类文件,也可以使用laravel ...

随机推荐

  1. Python自动化运维开发实战 一、初识Python

    导语 都忘记是什么时候知道python的了,我是搞linux运维的,早先只是知道搞运维必须会shell,要做一些运维自动化的工作,比如实现一些定时备份数据啊.批量执行某个操作啊.写写监控脚本什么的. ...

  2. centos 安装mysql数据库

    在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB. 1 下载并安装MySQL官方的 Yum Re ...

  3. 使用RestTemplate调用接口上传文件

    场景 接口接受一个文件,缓存在本地,验证文件的完整性及内容,然后将文件上传至云服务器: 下面只写利用RestTemplate将文件上传至云服务器,至于文件上传以及缓存在本地可以参考:JAVA文件上传: ...

  4. gdb 常用调试命令

    1.   file    quit 2.   frame bt 3.   finish 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数信息. until 当要退出在一个循环体 ...

  5. iostat磁盘监控工具

    安装iostat磁盘监控工具 1.安装 yum install sysstat 2.运行 iostat -k -d -x 1 10 -k:以kb为单位统计 -d:显示磁盘状态 -x:显示详细信息 1: ...

  6. JMeter调试工具--Debug Sampler(转载)

    转载自 http://www.cnblogs.com/fengpingfan Debug Sampler添加路径:[添加 / Sampler / Debug Sampler],面板设置如下: 打开JM ...

  7. spring boot 中使用 Redis 与 Log

    spring boot + mybatis + redis 配置 1.application.yml #配置访问的URLserver: servlet-path: /web port: spring: ...

  8. javac编译带包的java文件需要在命令处加参数

    不带包:javac aaa.java 带包:javac -d . aaa.java 带包就是 java文件中含有 package com.aaa;

  9. centos磁盘满了,查找大文件并清理

    今天发现vps敲入crontab -e 居然提示 “Disk quota exceeded” 无法编辑.于是"df -h"查了查发现系统磁盘空间使用100%了.最后定位到是/var ...

  10. jasper打印实例2 ----通过文件字节流获得PDF格式图片

    public class IspReportUtil { public static String exportReportToByte(CommonReportHandler handler)thr ...