1.什么是依赖容器

Slim 框架使用依赖容器来预载、管理和注入应用依赖。支持 PSR-11 或 Container-Interop 标准接口形式,框架内置 Pimple 容器,也可以使用 Acclimate 或 PHP-DI 等第三方的容器。

2.怎么使用依赖容器

你不具备提供相关性的容器。但是,如果这样做,则必须将容器实例注入Slim应用程序的构造函数中。

$container = new \Slim\Container;
$app = new \Slim\App($container);

向Slim容器添加服务:

$container = $app->getContainer();
$container['myService'] = function ($container) {$myService = new MyService();return $myService;
};

接下来,可以在Slim应用程序路径中,采用显式或隐式方式,对该容器实例引用操作。
下例是显示式引用方式:

/*** Example GET route** @param  \Psr\Http\Message\ServerRequestInterface $req  PSR7 request* @param  \Psr\Http\Message\ResponseInterface      $res  PSR7 response* @param  array                                    $args Route parameters** @return \Psr\Http\Message\ResponseInterface*/
$app->get('/foo', function ($req, $res, $args) {$myService = $this->get('myService');return $res;
});

下例是隐式引用方式:

/*** Example GET route** @param  \Psr\Http\Message\ServerRequestInterface $req  PSR7 request* @param  \Psr\Http\Message\ResponseInterface      $res  PSR7 response* @param  array                                    $args Route parameters** @return \Psr\Http\Message\ResponseInterface*/
$app->get('/foo', function ($req, $res, $args) {$myService = $this->myService;return $res;
});

要在使用之前测试容器中是否存在服务,请使用以下 has() 方法:

/*** Example GET route** @param  \Psr\Http\Message\ServerRequestInterface $req  PSR7 request* @param  \Psr\Http\Message\ResponseInterface      $res  PSR7 response* @param  array                                    $args Route parameters** @return \Psr\Http\Message\ResponseInterface*/
$app->get('/foo', function ($req, $res, $args) {if($this->has('myService')) {$myService = $this->myService;}return $res;
});

Slim使用__get()和__isset()魔术方法,用于应用程序实例上尚不存在的所有属性的应用程序容器。

3.使用容器所需的服务

如果您使用Slim的内置容器,可以不用理会下面的内容。
如果选择第三方容器,则必须自行定义这些必需的服务。

设置

应用程序设置的关联数组,包括键:

  • httpVersion
  • responseChunkSize
  • outputBuffering
  • determineRouteBeforeAppMiddleware。
  • displayErrorDetails。
  • addContentLengthHeader。
  • routerCacheFile。

环境
实例 \Slim\Http\Environment。
请求
实例 \Psr\Http\Message\ServerRequestInterface。
响应
实例 \Psr\Http\Message\ResponseInterface。
路由器
实例 \Slim\Interfaces\RouterInterface。
foundHandler
实例 \Slim\Interfaces\InvocationStrategyInterface。
phpErrorHandler
如果抛出PHP 7错误,则调用Callable。可调用的必须返回一个实例
\Psr\Http\Message\ResponseInterface 并接受三个参数:

  1. \Psr\Http\Message\ServerRequestInterface
  2. \Psr\Http\Message\ResponseInterface
  3. \Error

errorHandler
如果抛出异常,则调用Callable。可调用的必须返回一个实例
\Psr\Http\Message\ResponseInterface 并接受三个参数:

  1. \Psr\Http\Message\ServerRequestInterface
  2. \Psr\Http\Message\ResponseInterface
  3. \Exception

notFoundHandler
如果当前HTTP请求URI与应用程序路由不匹配,则调用Callable。可调用的必须返回一个实例
\Psr\Http\Message\ResponseInterface 并接受两个参数:

  1. \Psr\Http\Message\ServerRequestInterface
  2. \Psr\Http\Message\ResponseInterface

notAllowedHandler
如果应用程序路由与当前HTTP请求路径匹配但不与其方法匹配,则调用Callable。可调用的必须必须返回一个实例
\Psr\Http\Message\ResponseInterface 并接受三个参数:

  1. \Psr\Http\Message\ServerRequestInterface
  2. \Psr\Http\Message\ResponseInterface
  3. 允许HTTP 请求的数组

callableResolver

实例 \Slim\Interfaces\CallableResolverInterface。

Slim 4 PHP 框架零基础学习笔记-依赖容器相关推荐

  1. SQL零基础学习笔记(一)

    真的不知道我写了这么多不同的的学习笔记又没用..开始SQL零基础学习笔记 百度百科:SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取 ...

  2. 【Java】Java零基础学习笔记

    文章目录 前言 思维导图 前期准备 卸载JDK 安装JDK Hello,world 可能遇到情况 java程序运行机制 IDEA的安装 java基础部分 基础语法 运算符 包机制 javaDoc文档手 ...

  3. Docker零基础学习笔记

    零基础学习Docker Docker官方文档 基础语法 docker pull: 从DockerHub上拉取镜像 $ docker pull ngnix Using default tag: late ...

  4. 零基础学习笔记 - ADF4159

    目录 1.准备工作 1.1.前言 1.2.资料 1.3.介绍 1.4.应用 1.5.应用电路 2.ADF4159 2.1.功能框图 2.2.通信协议时序 2.2.寄存器 2.2.0.注意 2.2.1. ...

  5. HTML+CSS零基础学习笔记(五)— 模拟淘宝首页(静态)

    内容概览 模拟淘宝首页(静态) 一.项目重难点 二.效果图及源码 模拟淘宝首页(静态) 一.项目重难点 样式重置:在实际开发过程中,我们往往会新建一个单独的CSS文件(reset.css),用于对应H ...

  6. (Java零基础学习笔记)第二章 Java中的基本语法

    前言: 大家好! 我是BA unravel .如果你想和我一起学习JAVA,欢迎大家一起来学习这个世界上最好的语言! 学习目标: 一周掌握 Java 入门知识 学习内容: 1. 搭建 Java 开发环 ...

  7. 古月居《ROS入门21讲》零基础学习笔记

    文章目录 前言 1.课程简介 2.Linux系统介绍及安装 3.Linux基础操作(操作集) 命令结构 常用命令 快捷操作 4.cpp&python极简基础(操作集) 简单对比 安装编译器 编 ...

  8. web零基础学习笔记

    常见编码有:ANSI .GBK .GB2312. UTF-8. GB18030 .UNICODE:一般用UTF-8,<meta charset="UTF-8" /> 内 ...

  9. html标签强制转换位置,王老师html零基础学习笔记第4课——样式初始化+类型转化...

    摘要: 前端0基础到这个时候常用的标签基本结束,涉及稍微"高级"点的标签div盒模型 样式初始化+元素类型转换+外边距合并 一.样式初始化 1. 清除浏览器默认样式,以免造成不必要 ...

最新文章

  1. RSPN技术华为交换机(s2000hi)
  2. Python 中,字符串连接效率最高的方式是?一定出乎你的意料
  3. Vue_VueResource
  4. python支持多种编程范式吗_Python3学习之路~6.1 编程范式:面向过程 VS 面向对象...
  5. 50道编程小题目之【完数】
  6. Mysql报错Fatal error occurred in the transaction branch - check your data for consistency
  7. 蓝桥杯---特别数的和(C语言)
  8. Android设置标题栏图标
  9. OSI参考模型与排错
  10. python做的游戏有哪些
  11. 杭州/北京内推 | 阿里达摩院招聘视觉生成方向学术实习生(人才计划)
  12. oeasy教您玩转vim - 4 - # 深入帮助
  13. ExtCertPathValidatorException: Could not validate certificate: null
  14. SQL注入攻击及危害
  15. 浪潮nf5220服务器做系统,【浪潮NF5220参数】浪潮NF5220系列服务器参数-ZOL中关村在线...
  16. 理论+实验·MySQL数据库管理
  17. 如何快速搭建网站(小白教程)(48小时内完成)
  18. Python实现商品价格监控,识破双十一的套路
  19. 不好意思,我和 Java 内存模型杠上了!
  20. JQuery datatables 详细配置以及aoColumns参数

热门文章

  1. 从写简历,到面试,到谈薪酬的那些技巧和防坑指南
  2. 只用一个div画一个太极图
  3. python实现3d建模工具_3D One 2.5引爆新思维,用趣味编程来实现3D建模!
  4. python中集合的主要应用场景有哪些_python的用途有哪些?
  5. bluebird与原生Promise对象及bluebird模块的中文API文档
  6. java 整数除法整数_Java:整数除法
  7. adams功能区不显示_Windows 10系统下如何使用多个显示器的详细步骤及操作
  8. 精品!一组精美的2014年情人节海报素材
  9. gvm-PDF报告导出为空
  10. Java实现 foreach循环