#安装传送门 安装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中进行测试

<?phpnamespace 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

<?phpnamespace 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

  

  

 

转载于:https://www.cnblogs.com/gavinjunftd/p/8540134.html

laravel 服务提供者介绍和使用相关推荐

  1. Laravel 服务提供者和门面模式

    以 Laravel 自带的文件系统为例,在 config/app.php 的配置文件的 providers 数组中,注册了一个服务提供者: IlluminateFilesystemFilesystem ...

  2. Laravel服务提供者在平台短信服务中的应用

    我的个人博客:逐步前行STEP 服务提供者是一个有效的将工具与业务解耦的方案,下面结合一个实用案例来解释服务提供者在实现提供基础服务的工具中的应用. 服务提供者 服务提供者是 Laravel 应用启动 ...

  3. laravel 服务提供者

    1.创建服务提供者命令 php artisan make:provider 名称 2.绑定服务 //单例绑定 $this->app->singleton('b', function () ...

  4. php框架所用到的核心概念,【PHP】PHP现代框架代表-Laravel框架核心技术特性

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

  5. Laravel 打造一个完整的项目

    转载地址:https://blog.csdn.net/jartins/article/details/81195275 搭建简书 开发过程:       1.数据库迁移       2.数据填充    ...

  6. 深入浅出 Laravel 路由执行原理

    本文首发于「深入浅出 Laravel 路由执行原理」,转载请注明出处. 这篇文章我们将学习 Laravel 项目中一个很重要的主题 --「路由」. 可以说几乎所有的框架都会涉及到「路由」的处理,简单一 ...

  7. laravel 集成采集_Laravel 使用 QueryList 轻松采集网页

    说明 我们有时需要抓取一个网页的内容,但只需要特定部分的信息,通常会用正则来解决,这当然没有问题.正则是一个通用解决方案,但特定情况下,往往有更简单快 捷的方法. phpQuery的PHP通用列表采集 ...

  8. 关于php中laravel框架的学习--适合菜鸟初学者

    关于php中laravel框架的学习 关于laravel的介绍就不讲了,总之laravel是款比较强大的框架,它是国外框架所以在安装的上面可能比较麻烦. laravel的安装 首先安装laravel之 ...

  9. Laravel Valet - macOS 极简主义者的开发环境

    文章目录 1. Laravel Valet 介绍 2. Laravel Valet 安装 3. 测试 Laravel Valet 4. PHP 版本 5. 服务站点 6. 定制 Valet 驱动 7. ...

最新文章

  1. tinyxml 读取文本节点_TinyXml 读写XML文件
  2. 冲刺One之站立会议8 /2015-5-21
  3. UltraEdit的使用方法
  4. Linux与Windows中的UTC时间
  5. rxjs的pipe和map配合使用的单步调试
  6. 【百度地图API】如何给自定义覆盖物添加事件
  7. android 判断服务是否活动,Android:我如何获得当前的前台活动(从服务)?
  8. pytorch torch.linspace
  9. 在TextView中插入图片
  10. HTML标记语言——表单的详细使用说明
  11. 使用mustache js模板引擎
  12. 完全小白向win10安装配置Java运行环境
  13. 程序员接单网站哪个好(盘点十大程序员接私活平台)
  14. 熊出没电锯机器人哪一集_熊出没伐木机器人第几集 熊出没光头强造伐木机器人是哪一集?...
  15. 阿里cdn请求原理以及缓存机制
  16. Python调用百度API进行动植物识别
  17. centos部署hadoop完全分布式
  18. android图片美化开源,GitHub - xingxing-yan/BLImage: Android中美化图片的库。功能包括滤镜,贴纸,标签,裁剪,涂鸦,亮度,饱和度,对比度,马赛克等功能...
  19. 【慕课笔记】第五章 JAVA中的集合框架(中) 第1节 MapHashMap简介
  20. java实现极简单的 TXT小说阅读器(第二版)

热门文章

  1. SpringMVC Controller 和 Servlet的关系
  2. 数据结构 二叉树的遍历
  3. python限制输入值范围_求python 中if 里如何设定一个值的范围
  4. 求素数的方法完整归纳,学的不仅是“求素数”!
  5. 栈和队列都是什么结构_数据结构与算法之初识栈与队列
  6. mfc调取摄像头显示并截图_前摄后录,让行车安全再次提升:70迈智能后视镜后摄像头体验...
  7. mysql 事物状态有几种_MySQL知识点汇总:亿级高并发数据库运转原理大公开!
  8. f12控制台如何查看consul_Consul初探-从安装到运行
  9. 从零入门 Serverless | Knative 带来的极致 Serverless 体验
  10. java classes.jar_classes.jar