首先理解两个概念
1.契约:一组定义了框架核心服务的接口
2.服务提供者:所有 Laravel 应用程序启动的中心所在。
包括你自己的应用程序,以及所有的 Laravel 核心服务,都是通过服务提供者启动的。
启动指的是 注册 事物,包括注册服务容器绑定、事件侦听器、中间件,甚至路由。
 
我们还是继续超人的故事,现在拿xpower来具体分析
 
xpower的诞生---(契约和服务提供者)
 
1.定义一个契约(接口)
app\Contracts文件夹下
<?php 
namespace App\Contracts; interface SuperModuleContract {
  //激活超能力
  public function activate(array $target);
}
2.一个实现这个接口的类
app\Services文件夹下
<?php
namespace App\Services;
use App\Contracts\SuperModuleContract;
class XPower implements SuperModuleContract {
  public function activate(array $target) {
    // 这只是个例子。。具体自行脑补
  }
}
3、创建服务提供者
app\Providers文件夹下
<?
php namespace App\Providers; use Illuminate\Support\ServiceProvider;
use App\Services\XPower;
class XPowerProvider extends ServiceProvider {
  public function boot() { // }
  public function register() {
  //singleton绑定单例
  //如何使用:App::make('xpower')方法时调用
  $this->app->singleton('xpower',function(){ return new XPower(); });
  
  //bind绑定实例到接口以便依赖注入
  // 如何使用:在类构造方法中实例化,并指定接口类型
  $this->app->bind('App\Contracts\SuperModuleContract',function(){ return new XPower(); }); }
}
4、注册服务提供者
配置文件config/app.php的providers数组中:
'providers' => [ //其他服务提供者 App\Providers\XPowerProvider::class, ],
通过服务提供者,我们将超能力,绑定到了服务容器中,这样我们可以在任何时候实例化这个超能力了
 
需要注意的一些地方:
1.所有的服务提供者都继承了 Illuminate\Support\ServiceProvider 类。
2.这个抽象类要求你在你的提供者上定义至少一个方法:register。在 register 方法中,你应该只将事物绑定至服务容器之中。永远不要试图在 register 方法中注册任何事件侦听器、路由或任何其它功能。

laravel框架总结(五) -- 服务提供者(提及契约Contracts)的更多相关文章

  1. 【PHP】用了这么久的Laravel框架,你分析过核心架构了没

    Laravel最初的设计是为了面向MVC架构的,它可以满足如事件处理.用户身份验证等各种需求.另外它还有一个由管理数据库强力支持,用于管理模块化和可扩展性代码的软件包管理器. Laravel以其简洁. ...

  2. Laravel框架一:原理机制篇

    Laravel作为在国内国外都颇为流行的PHP框架,风格优雅,其拥有自己的一些特点.以下是本人一点粗浅的认识,不敢奢求他人同意,更不能一一而足,仅为自己做一点总结而已. 一. 请求周期 Laravel ...

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

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

  4. 关于Laravel框架中Guard的底层实现

    1. 什么是Guard 在Laravel/Lumen框架中,用户的登录/注册的认证基本都已经封装好了,开箱即用.而登录/注册认证的核心就是: 用户的注册信息存入数据库(登记) 从数据库中读取数据和用户 ...

  5. [php]laravel框架容器管理的一些要点

    本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章很长,但是内容应该很有用,希望有需要的朋友能看到.php经验有限,不到位的地方,欢迎帮忙指正. ...

  6. Laravel框架中的make方法详解

    为什么网上已经有这么多的介绍Laravel的执行流程了,Laravel的容器详解了,Laravel的特性了,Laravel的启动过程了之类的文章,我还要来再分享呢? 因为,每个人的思维方式和方向是不一 ...

  7. laravel框架容器管理

    来自http://www.cnblogs.com/chy1000/p/7072936.html 本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点.文章 ...

  8. laravel框架5.2版本组件包开发

     一.包的作用 1 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2  如同文件夹一样,包也采用了树形目录的存储方式.同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的, ...

  9. laravel框架一次请求的生命周期

    第一件事所有的请求都会被web服务器(Apache/Nginx)导向public/index.php文件.index.php文件载入Composer生成的自动加载设置,然后从bootstrap/app ...

随机推荐

  1. html第二天CSS

  2. XML于JSON

    XML:可拓展的标记语言(跨平台数据表现)用于保存数据 XML:标记需要关闭 :单根性 .NET中DOM常用对象: XmlDocument :一个XML文档 XmlNode:xml中的单个节点 Xml ...

  3. MyBatis简单实例

    ---直接贴代码 (1)User.Java package me.gacl.domain; /** * @author gacl * users表所对应的实体类 */ public class Use ...

  4. EDI - Biztalk Sample

    1. EDI Control - Scripting Usage:

  5. 创建Struct2的web应用(一)

    1.上http://struts.apache.org/ 下载Struct2 2.解压缩,将lib文件夹内的部分JAR复制到java web应用的WEB-INF/lib目录下.所需JAR: commo ...

  6. ActiveMQ: 搭建Broker集群(cluster)

    上一篇介绍了基于Networks of Borkers的2节点HA方案,这一篇继续来折腾Networks of Brokers,当应用规模日渐增长时,2节点的broker可能仍然抗不住访问压力,这时候 ...

  7. Codeigniter CRUD生成工具

    Codeigniter  CRUD生成工具 http://crudigniter.com/

  8. spark的安装

    官方安装地址:http://spark.apache.org/docs/latest/spark-standalone.html 准备 1.三台机器(m2.m3.m4) 2.m2位master, m3 ...

  9. 解决SQLSERVER在还原数据时出现的“FILESTREAM功能被禁用”问题

    解决SQLSERVER在还原数据时出现的“FILESTREAM功能被禁用”问题 今天由于测试需要,在网上下载了Adventureworks2008实例数据库的BAK文件,进行还原时出现了这样的错误“F ...

  10. matlab实现分水岭算法处理图像分割

    此程序为优化后的分水岭算法,避免了图像过分割 I= imread('D:\Images\pic_loc\1870405130305041503.jpg'); imshow(I); h=fspecial ...