首先理解两个概念
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. sprin加载顺序

    spring加载有个比较有意思的问题,这里片很不错的文章 http://guoliangqi.iteye.com/blog/632697

  2. 怎么在Centos7下添加win8.1的启动项

    首先找到启动文件. 在/boot/grub2目录下, 找到grub.cfg文件. 然后, sudo修改,  用gedit工具方便. 怎么修改? 打开文件, 找到有两个menuentry开头的部分, 然 ...

  3. 一些常用的NLTK频率分布类中定义的函数

    fdist=FreqDist(samples)创建包含给定样本的频率分布fist.inc(sample)增加样本fdist['monstrous']计数给定样本出现的次数fdist.freq('mon ...

  4. sphinx网址

    http://www.phperz.com/article/14/0615/95.htmlhttp://www.kuqin.com/shuoit/20141101/342963.htmlhttp:// ...

  5. 故障处理-ORA-00376/ORA-01110

    数据库实例启动之后发现,9号数据文件发生故障,file 9 cannot be read at this time, ORACLE Instance ilndb2 (pid = 16) - Error ...

  6. 浏览器中Javascript的加载和执行

    在刚学习Javascript时曾对该问题在小组内做个一次StudyReport,发现其中的基础还是值得分析的. 从标题分析,可以加个Javascript的加载和执行分为两个阶段:加载.执行.而加载即浏 ...

  7. [knowledge][basic][hardware] 内存的硬件结构(转)

    写的并不太易懂,但概念性的科普已足够. 原文地址:http://blog.csdn.net/miaomao1989/article/details/51508195 Memory中的Channel/R ...

  8. MVC控制器取参数值

    1.这个方法是获取提交表单里的参数值,也就是有name="xxx"的属性的表单控件的值 FormCollection传值 public ActionResult Login(For ...

  9. ASP.NET MVC中从后台控制器(Controller)传递数据到前台页面视图(View)方式

    方式一: 数据存储模型Model: public class CalendarEvent { public string id { get; set; } public DateTime start ...

  10. Maven-008-Nexus 私服部署发布报错 Failed to deploy artifacts: Failed to transfer file: ... Return code is: 4XX, ReasonPhrase: ... 解决方案

    我在部署构件至 maven nexus 私服时,有时会出现 Failed to deploy artifacts: Failed to transfer file: ... Return code i ...