首先理解两个概念
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. centos6 LVS-DR模式---分析

    LVS是什么就不多说了. 先上拓扑图 1台LVS   3台Realserver    一个客户端.  环境全部模拟全在内网环境(selinux和iptables关闭) 先简略说一下安装步骤: LVS上 ...

  2. ASP.NET中如何读取和写入注册表

    直接给源码: 读取注册表内容: RegistryKey regkey=Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Window ...

  3. IOS第八天(4:UITableViewController新浪微博, 代码创建布局和数据转模型)

    ******控制control #import "HMViewController.h" #import "HMStatus.h" #import " ...

  4. Node.js学习记录

    一.NPM 使用介绍 NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用. 允许用 ...

  5. javaWeb中servlet开发(5)——WEB开发模式:Mode I与Mode II

    1.servlet开发 2.model I模式 客户端通过访问JSP,调用里面的javabean,而通过javabean调用处理数据库的操作,javabean中有专门处理数据库的操作,数据库主要以DA ...

  6. Linux内核设计第六周 ——进程的描述和创建

    Linux内核设计第六周 ——进程的描述和创建 第一部分 知识点总结 一.进程描述符task_struct数据结构 1.操作系统的三大功能: 进程管理.内存管理.文件系统 2.进程的作用: 将信号.进 ...

  7. inittab 分析

    内核初始化后,启动init进程/sbin/init,读取/etc/inittab文件进行初始化. 参考链接 http://wenku.baidu.com/view/5a82b5f67c1cfad619 ...

  8. myEclipse 界面窗口打不开问题

    用的myEclipse版本为2014,在其他工作空间没有此问题,在此工作有此问题. 解决办法: 把当前工作空间视图重置即可

  9. iOS:高德地图的使用

    本人花了点时间集成了高德地图的几乎所有的功能,包含:地图的显示.地图的绘制.地图的定位.地图的POI数据检索.地图的线路规划.地图导航等下载地址如下:https://github.com/xiayua ...

  10. Spring MVC Integration,Spring Security

     http://docs.spring.io/spring-security/site/docs/4.2.0.RELEASE/reference/htmlsingle/#authorize-reque ...