Slim的设计与实现都非常精简易懂,其对请求的主处理流程如下图所示:

其中的核心概念包括:IoC容器、中间件、路由匹配等。

IoC容器

IoC,为Inversion of Control的缩写,中文翻译为“控制反转” - 是一种解决组件间依赖关系、配置和生命周期的设计模式,其最常见的实现方式为:依赖注入(DI)- 当系统/应用需要使用某个依赖组件时,容器根据配置信息构建一个组件对象返回给系统/应用。

对于Web框架来说,基于Ioc容器可以将框架的功能拆解成多个组件,按需配置调用。

Slim的IoC容器类为:\Slim\Helper\Set,以单例request为例,当调用request对象时$app->request,先触发Slim类的魔术方法__get,其实现如下所示:

public function __get($name)
{return $this->container->get($name);
}

而容器类Set的get方法实现如下:

/*** Get data value with key* @param  string $key     The data key* @param  mixed  $default The value to return if data key does not exist* @return mixed           The data value, or the default value*/
public function get($key, $default = null)
{if ($this->has($key)) {$isInvokable = is_object($this->data[$this->normalizeKey($key)]) && method_exists($this->data[$this->normalizeKey($key)], '__invoke');// 注意这里的$this,在初始化组件时,将当前容器对象作为参数传入// 从这里可以看到,容器里可以存放普通的配置信息(如settings),也可以存放组件配置return $isInvokable ? $this->data[$this->normalizeKey($key)]($this) : $this->data[$this->normalizeKey($key)];}return $default;
}

我们再来看看单例组件的实现,以request为例:

// 注册单例组件request
$this->container->singleton('request', function ($c) {// request组件的实例化依赖于environment组件,// 而environment组件包含了$_SERVER以及进程标准输入的数据return new \Slim\Http\Request($c['environment']);
});

其中singleton方法的实现如下所示:

/*** Ensure a value or object will remain globally unique* @param  string   $key   The value or object name* @param  \Closure $value The closure that defines the object* @return mixed*/
public function singleton($key, $value)
{$this->set($key, function ($c) use ($value) {// 静态对象static $object;if (null === $object) {$object = $value($c);}return $object;});
}

今天就先到这里

对Slim 框架进行总结相关推荐

  1. 使用Slim框架实现基本的REST API

    REST API是一种广泛应用于服务器和客户端之间的网络通信接口设计风格.首先要明确的是,REST是一种API设计风格,或是理解成一种设计思想,而不是一个具体的技术.编程语言等(有点类似于模块化编程思 ...

  2. slim框架中防止crsf攻击时,用到的函数hash_equals

    1.防止crsf攻击的最多解决方案就是 为每个请求生成一个唯一 token ,验证来源于客户端 HTML 表单产生的 POST等请求 . 2.这个token默认放在session中. slim框架源码 ...

  3. Slim 框架源码解读

    0x00 前言 Slim 是由<PHP The Right Way>作者开发的一款 PHP 微框架,代码量不算多(比起其它重型框架来说),号称可以一下午就阅读完(我觉得前提是熟悉 Slim ...

  4. 搭建迁移训练Slim框架环境

    前言 Slim是一个小巧.微型基于Tensor Flow的训练框架,它支持许多轻量级的神经网络,如:Mobilenet,能够快速训练在微型低功耗的设备上运算的神经网络,在MCU上一般运算赫兹都在百兆上 ...

  5. PHP再学习4—— slim框架学习和使用

    0.前言 slim是一个简单而又强大的PHP5框架,可以用来创建RESTful的web应用.可以借助slim框架设计一个简化版的yeelink平台.RESTFul架构对物联网非常重要,通过Slim的学 ...

  6. php slim 怎么用,PHP再学习4—— slim框架学习和使用

    0.前言 slim是一个简单而又强大的PHP5框架,可以用来创建RESTful的web应用.可以借助slim框架设计一个简化版的yeelink平台.RESTFul架构对物联网非常重要,通过Slim的学 ...

  7. php slim框架 教程,Slim —— PHP web开发微框架

    Slim是一款基于PHP的web开发微框架,帮助 PHP 开发者快速编写简单强大的web应用和API.Slim的接口简单而符合直觉,文档也很详细. 直接看一段代码吧: $app->get('/' ...

  8. 使用Slim框架创建一个JSON RESTfull API

    使用Slim,你可以很简单快速的在几秒钟内创建简单基于PHP的RESTfull网站和API 如果你想在几秒钟内创建一个JSON API,可以使用Slim扩展来处理json输出. 建立一个compose ...

  9. 对Slim 框架进行总结 一

    导读:今天我们来看看中间件的相关功能 中间件 Slim中的中间件分两种:应用级中间件.路由级中间件. 应用中间件基于Rack协议实现,可以在应用对象调用之前或之后检查.分析.或修改应用环境变量.请求对 ...

最新文章

  1. 行人检测 读书笔记 综述
  2. 多协议标签交换的MPLS原理
  3. *.bmp序列保存为*.raw文件[matlb实现]
  4. .Net(C#)自定义WinForm控件之小结篇(强力推荐)
  5. 图Graph--拓扑排序(Topological Sorting)
  6. Hdoj 2563.统计问题 题解
  7. IDEA控制台乱码终极解决方案
  8. Android 学习笔记(十五):Activity-GalleryView
  9. 中国系泊系统行业市场供需与战略研究报告
  10. python sqlite3加密_sqlite3加密
  11. 看完这个故事终于知道区块链是什么了
  12. 二、 分式化简(LCP2)
  13. python如何判断用户的电话属于移动、联通、还是电信的
  14. 跟着Vam一起学习Typescript(第一期)(更新中)
  15. 止疼药-盐酸羟考酮缓释片//2021-2-20
  16. EMD基础学习---emd例子
  17. 容联云:实现异步 手机短信验证码
  18. win7连接linux ubuntu,win7远程桌面连接Ubuntu Kylin14.04
  19. 加勒比海盗——最优装载问题
  20. 解决浏览器连不上校园网问题

热门文章

  1. 四个小问题,简单解释一下 tomcat 和servlet 的关系
  2. tomcat服务器连接数问题解决
  3. freemarker导出word、word转pdf,带附件、图片等比缩放
  4. 线性规划之二 —— 单纯形算法(详解)
  5. 【YOLOv7/YOLOv5系列改进NO.51】融入多分支空洞卷积结构RFB-Bottleneck改进PANet构成新特征融合网络
  6. 一维信号小波阈值去噪
  7. 【HDU】5761 Rower Bo
  8. 李宏毅作业七其三 Network Compression (Network Pruning)
  9. RISC-V指令集架构特点及其总结
  10. 员工公寓楼建设项目电力监控系统的研究与应用