首先理解两个概念
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. 最轻量级的前端Mvc框架backbone

    最轻量级的前端Mvc框架backbone依赖最轻量级的库understore backbone并非将前端再次切分为mvc,而是分为了七大模块,分别是:Events.Model.Collection.R ...

  2. IOS网络第二天 - 02-异步HTTP请求block回调 解析

    ************** #import "HMViewController.h" #import "MBProgressHUD+MJ.h" @interf ...

  3. mysql5.5手册读书日记(4)

    <?php /* InnoDB事务模型和锁定 15.2.10.1. InnoDB锁定模式 15.2.10.2. InnoDB和AUTOCOMMIT 15.2.10.3. InnoDB和TRANS ...

  4. 省略号 对单行 多行的css

    .twoline{ display: -webkit-box !important;; overflow:hidden; text-overflow: ellipsis; word-break: br ...

  5. chrome下input[type=text]的placeholder不垂直居中的问题解决

    http://blog.csdn.net/do_it__/article/details/6789699 <input type="text" placeholder=&qu ...

  6. TypedValue.applyDimension 中dp和sp之间转化的真相

    转载自http://www.cnblogs.com/xilinch/p/4444833.html 最近在看了许多关于dp-px,px-dp,sp-px,px-sp之间转化的博文,过去我比较常用的方式是 ...

  7. libgdx actor 透明问题

    遇到一个问题,自定义的Actor在使用batch.draw时,其他Actor设置的透明影响到了这个Actor 处理方法为 在自定义Actor中 draw方法中 绘制前,加入 Color color = ...

  8. 使用 HTML5 input 类型提升移动端输入体验

    在过去的几年里,在移动设备上浏览网页已变得难以置信的受欢迎. 但是这些设备上的浏览体验,有时遗留很多的有待改进.当涉及到填写表单时,这一点尤为明显.幸运的是,HTML5规范引入了许多新input类型, ...

  9. 解决32位plsql连接数据库的问题

    解决32位plsql连接数据库的问题:   安装32位的oracle数据库client版,此地址可下载[http://www.oracle.com/technetwork/database/featu ...

  10. Extjs 图片的自动缩放

    function resizeImage(obj) { var width = Ext.getCmp('welcome').getWidth(); //welcome 为一Panel的id 分割线下的 ...