Slim 4 PHP 框架零基础学习笔记-依赖容器
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 并接受三个参数:
- \Psr\Http\Message\ServerRequestInterface
- \Psr\Http\Message\ResponseInterface
- \Error
errorHandler
如果抛出异常,则调用Callable。可调用的必须返回一个实例
\Psr\Http\Message\ResponseInterface 并接受三个参数:
- \Psr\Http\Message\ServerRequestInterface
- \Psr\Http\Message\ResponseInterface
- \Exception
notFoundHandler
如果当前HTTP请求URI与应用程序路由不匹配,则调用Callable。可调用的必须返回一个实例
\Psr\Http\Message\ResponseInterface 并接受两个参数:
- \Psr\Http\Message\ServerRequestInterface
- \Psr\Http\Message\ResponseInterface
notAllowedHandler
如果应用程序路由与当前HTTP请求路径匹配但不与其方法匹配,则调用Callable。可调用的必须必须返回一个实例
\Psr\Http\Message\ResponseInterface 并接受三个参数:
- \Psr\Http\Message\ServerRequestInterface
- \Psr\Http\Message\ResponseInterface
- 允许HTTP 请求的数组
callableResolver
实例 \Slim\Interfaces\CallableResolverInterface。
Slim 4 PHP 框架零基础学习笔记-依赖容器相关推荐
- SQL零基础学习笔记(一)
真的不知道我写了这么多不同的的学习笔记又没用..开始SQL零基础学习笔记 百度百科:SQL(Structured Query Language)结构化查询语言,是一种数据库查询和程序设计语言,用于存取 ...
- 【Java】Java零基础学习笔记
文章目录 前言 思维导图 前期准备 卸载JDK 安装JDK Hello,world 可能遇到情况 java程序运行机制 IDEA的安装 java基础部分 基础语法 运算符 包机制 javaDoc文档手 ...
- Docker零基础学习笔记
零基础学习Docker Docker官方文档 基础语法 docker pull: 从DockerHub上拉取镜像 $ docker pull ngnix Using default tag: late ...
- 零基础学习笔记 - 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. ...
- HTML+CSS零基础学习笔记(五)— 模拟淘宝首页(静态)
内容概览 模拟淘宝首页(静态) 一.项目重难点 二.效果图及源码 模拟淘宝首页(静态) 一.项目重难点 样式重置:在实际开发过程中,我们往往会新建一个单独的CSS文件(reset.css),用于对应H ...
- (Java零基础学习笔记)第二章 Java中的基本语法
前言: 大家好! 我是BA unravel .如果你想和我一起学习JAVA,欢迎大家一起来学习这个世界上最好的语言! 学习目标: 一周掌握 Java 入门知识 学习内容: 1. 搭建 Java 开发环 ...
- 古月居《ROS入门21讲》零基础学习笔记
文章目录 前言 1.课程简介 2.Linux系统介绍及安装 3.Linux基础操作(操作集) 命令结构 常用命令 快捷操作 4.cpp&python极简基础(操作集) 简单对比 安装编译器 编 ...
- web零基础学习笔记
常见编码有:ANSI .GBK .GB2312. UTF-8. GB18030 .UNICODE:一般用UTF-8,<meta charset="UTF-8" /> 内 ...
- html标签强制转换位置,王老师html零基础学习笔记第4课——样式初始化+类型转化...
摘要: 前端0基础到这个时候常用的标签基本结束,涉及稍微"高级"点的标签div盒模型 样式初始化+元素类型转换+外边距合并 一.样式初始化 1. 清除浏览器默认样式,以免造成不必要 ...
最新文章
- RSPN技术华为交换机(s2000hi)
- Python 中,字符串连接效率最高的方式是?一定出乎你的意料
- Vue_VueResource
- python支持多种编程范式吗_Python3学习之路~6.1 编程范式:面向过程 VS 面向对象...
- 50道编程小题目之【完数】
- Mysql报错Fatal error occurred in the transaction branch - check your data for consistency
- 蓝桥杯---特别数的和(C语言)
- Android设置标题栏图标
- OSI参考模型与排错
- python做的游戏有哪些
- 杭州/北京内推 | 阿里达摩院招聘视觉生成方向学术实习生(人才计划)
- oeasy教您玩转vim - 4 - # 深入帮助
- ExtCertPathValidatorException: Could not validate certificate: null
- SQL注入攻击及危害
- 浪潮nf5220服务器做系统,【浪潮NF5220参数】浪潮NF5220系列服务器参数-ZOL中关村在线...
- 理论+实验·MySQL数据库管理
- 如何快速搭建网站(小白教程)(48小时内完成)
- Python实现商品价格监控,识破双十一的套路
- 不好意思,我和 Java 内存模型杠上了!
- JQuery datatables 详细配置以及aoColumns参数
热门文章
- 从写简历,到面试,到谈薪酬的那些技巧和防坑指南
- 只用一个div画一个太极图
- python实现3d建模工具_3D One 2.5引爆新思维,用趣味编程来实现3D建模!
- python中集合的主要应用场景有哪些_python的用途有哪些?
- bluebird与原生Promise对象及bluebird模块的中文API文档
- java 整数除法整数_Java:整数除法
- adams功能区不显示_Windows 10系统下如何使用多个显示器的详细步骤及操作
- 精品!一组精美的2014年情人节海报素材
- gvm-PDF报告导出为空
- Java实现 foreach循环