Slim 4.0.0 发布
我们很高兴地宣布 Slim 4.0.0 发布。请将您对本次发布的所有反馈直接发送至 Slim 4 发布反馈主题。新文档位于 此处。
支持的 PSR-7 实现 CI 状态
注意:Travis-CI 被配置成至少每 24 小时自动触发一次。
发展方向
对于这个主要版本,重点如下
- 实现 PSR-15 中间件支持
- 解除我们对 Slim 的 PSR-7 实现的依赖,并启用对任何 PSR-7 实现的使用
- 解除我们对 Pimple 的依赖,并启用对任何 PSR-11 ContainerInterface 实现的使用
- 解除我们对 FastRoute 的依赖,并实现接口,使用户能够使用任何路由库
- 将错误处理从内核剥离,使用户能够轻松使用自己的实现
- 将响应发送从内核剥离,使用户能够轻松使用自己的实现
- 删除所有特征,以在调试时提供更清晰的调用堆栈跟踪
- 创建一个应用程序工厂,由于模块性提高后的复杂性,更容易创建
App
实例
重大更改
- Slim 需要 PHP 7.1 或更高版本。
- Slim 不再附带 PSR-7 实现。
- Slim 不再附带 Pimple。
- Slim 不再将
default_mimetype
设置为空字符串,因此您需要使用ini_set('default_mimetype', '')
在 php.ini 或应用程序中自行设置。 - Slim
App::$settings
已删除,已实现多个中间件来替换各个设置中的功能。 - 现在通过
Slim\Middleware\RoutingMiddleware
执行路由。默认情况下,路由将位于中间件队列的最后执行。如果您想从$request
访问route
和routingResults
属性,那么您需要将此中间件添加到最后,因为在运行应用程序时,它将在队列中首先执行。中间件队列仍按照后进先出 (LIFO) 顺序执行。这将替换determineRouteBeforeAppMiddleware
设置。 - 现在通过
Slim\Middleware\OutputBufferingMiddleware
执行输出缓冲。这将替换outputBuffering
设置。 - 现在通过
Slim\Middleware\ContentLengthMiddleware
计算内容长度标头。这将替换addContentLengthHeader
设置。 RouterInterface
组件已拆分为 4 个接口RouteCollectorInterface
、RouteParserInterface
、RouteResolverInterface
和DispatcherInterface
。- 双通道中间件已弃用。中间件签名现在是 PSR-15
MiddlewareInterface
签名process(Request $request, RequestHandler $handler)
。不再支持双通道function ($request, $response, $next)
签名。您仍可以使用具有function (Request $request, RequestHandler $handler) {}
签名的回调函数来创建中间件或使用具有该签名的可调用类。 - Slim
App
现在实现了 PSR-15RequestHandlerInterface
。使用$app->handle($request)
代替$app($request)
。 - PSR-15 RequestHandler 现在可用作路由回调函数。
- 已删除
$app
绑定到RouteGroup
回调函数。RouteCollectorProxy
会改为注入到RouteGroup
的回调函数。$app->group('/group', function (RouteCollectorProxy $group) { $group->get(...); }
App::subRequest()
方法已删除。您可以通过在路由回调函数中$app->handle($request)
进行子请求。- 已移除
SlimException
。已经实现新的HttpException
,即HttpBadRequestException
、HttpForbiddenException
、HttpInternalServerErrorException
、HttpMethodNotAllowedException
、HttpNotFoundException
、HttpNotImplementedException
和HttpUnauthorizedException
。您还可以通过扩展HttpException
或HttpSpecializedException
来创建自己的异常。 - 现在在用户
App::map()
时,请求方法名称区分大小写。 - 所有特性均已被移除。
CallableResolverTrait
和MiddlewareAwareTrait
不再存在。 - 已推出两个新工厂。
AppFactory
和ServerRequestCreatorFactory
以简化App
和ServerRequest
创建。我们目前支持 4 个 PSR-7/ServerRequest 创建器组合(Slim-Psr7、Nyholm PSR-7 和 Nyholm PSR-7 Server、Guzzle PSR-7 和 Guzzle HTTP Factory 以及 Zend-Diactoros)。
变更日志
4.0.0 - 2019-08-01
添加
- #2765 简化内部中间件
ErrorMiddleware
和RoutingMiddleware
的排队 - #2759 添加
RouteContext
以启用对当前路由、路由解析器和路由结果的访问 - #2751 添将默认错误呈现器内容类型设置在
ErrorHandler
组件上的功能 - #2737 BC 更改,通过
ErrorRendererInterface
更改为使用可调用模式来利用CallableResolver
- #2734 添加对基于内容类型的错误呈现器和设置默认错误呈现器功能的支持
- #2716 当库在作用域中时,添加自动 Slim-Http 请求/响应修饰
- #2654
RouteParser::pathFor()
和RouteParser::relativePathFor()
已弃用。使用RouteParser::urlFor()
和RouteParser::relativeUrlFor()
- #2642 添加
AppFactory
以启用 PSR-7 实现和 ServerRequest 创建器自动检测 - #2641 添加
RouteCollectorProxyInterface
,它将所有路由映射功能从应用程序中提取到其自己的接口中 - #2640 添加
RouteParserInterface
并将 FastRoute 路由解析器与核心完全解耦。relativePathFor()
、urlFor()
和fullUrlFor()
方法现在位于此接口上 - #2639 添加
DispatcherInterface
并将 FastRoute 调度器与核心完全解耦。这使我们能够用任何其他路由器替换我们的路由器实现 - #2638 添加
RouteCollector::fullUrlFor()
来提供生成完全限定 URL 的能力 - #2634 添加了按路由设置调用策略的能力
- #2555 添加了 PSR-15 中间件支持
- #2529 Slim 不再附带 PSR-7 实现。您需要提供 PSR-7 ServerRequest 和 PSR-17 ResponseFactory 来运行 Slim
- #2507 Router::map() 中的方法名称现在区分大小写,因此,在 App::map() 中也是如此
- #2497 PSR-15 RequestHandler 现在可用作路由的可调用项
- #2496 Slim App 现在可用作 PSR-15 Request Handler
- #2405 RoutingMiddleware 现在添加了
routingResults
请求属性来保存路由结果 - #2404 Slim 4 需要 PHP 7.1 或更高版本
- #2425 增加了 $app->redirect()
- #2398 增加了 Middleware\ErrorMiddleware
- #2329 增加了 Middleware\MethodOverrideMiddleware
- #2288 将路由与调度分开
- #2254 增加了 Middleware\ContentLengthMiddleware
- #2166 增加了 Middleware\OutputBufferingMiddleware
已弃用
- #2641 弃用
RouteCollector::pushGroup()
、RouteCollector::popGroup()
,它们被RouteCollector::group()
取代 - #2638 弃用
RouteCollector::pathFor()
,它被RouteCollector::urlFor()
取代,保留原始功能 - #2555 双重遍历中间件支持已弃用
已删除
- #2612 删除 Routable,重构 RouteGroup 和 Route 接口
- #2589 完全删除 App::$settings
- #2587 删除 Pimple 作为开发依赖项
- #2398 Slim 不再将错误处理内置于 App 中。将 ErrorMiddleware() 作为最外层的中间件添加到
- #2375 Slim 不再将
default_mimetype
设置为空字符串,因此您需要在 php.ini 或您的应用中使用ini_set('default_mimetype', '');
自行设置。 - #2288 已移除
determineRouteBeforeAppMiddleware
设置。现在,在需要该设置的地方添加 RoutingMiddleware() - #2254 已移除
addContentLengthHeader
设置 - #2221 已移除
Slim\Http
,现在 Slim 依赖于单独的 Slim-Http 组件 - #2166 已移除
outputBuffering
设置 - #2078 已移除 App::subRequest()
- #2098 已移除 CallableResolverTrait
- #2102 已从路由器中移除容器
- #2124 已移除 Slim\Exception\SlimException
- #2174 已从 Container-Interop 转换到 PSR-11
- #2290 已移除容器。使用
App::setContainer()
设置您的容器。 - #2560 已删除 $this 的 group() 绑定
已更改
- #2104 设置将成为
App::__construct()
中的顶级数组元素
已修复
- #2588 已修复
Router::setCacheFile()
的文件/目录权限处理 - #2067 单元测试现在可在 Windows 系统中通过
- #2405 我们对 FastRoute 传递路径之前使用 rawurldecode(),因此现在路径中的 UTF-8 字符能够发挥作用
循序渐进的 Hello World
步骤 1:安装 Composer
没有 Composer?只需按照其 下载 页面上的说明,即可轻松安装。
步骤 2:安装 Slim
我们建议您使用 Composer 安装 Slim。导航到项目根目录并执行如下所示 bash 命令。此命令将下载 Slim 框架及其第三方依赖项到项目 vendor/
目录中。
composer require slim/slim "^4.0"
步骤 3:安装 PSR-7 实现和 ServerRequest 创建器
在使用 Slim 之前,您需要选择最适合您应用程序的 PSR-7 实现。为了便于自动检测并让您在无需手动创建 ServerRequest
的情况下使用 AppFactory::create()
和 App::run()
,您需要安装以下的一种实现:
Slim PSR-7
composer require slim/psr7
Nyholm PSR-7 和 Nyholm PSR-7 Server
composer require nyholm/psr7 nyholm/psr7-server
Guzzle PSR-7 和 Guzzle HTTP Factory
composer require guzzlehttp/psr7 http-interop/http-factory-guzzle
Zend Diactoros
composer require zendframework/zend-diactoros
第 4 步:Hello World
<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Slim\Factory\AppFactory;
require __DIR__ . '/../vendor/autoload.php';
$app = AppFactory::create();
$app->get('/', function (Request $request, Response $response, $args) {
$response->getBody()->write('Hello world!');
return $response;
});
$app->run();
Slim 4 DDD 框架
@l0gicgate 创建了一个具有 DDD 样式目录结构、示例文件和测试覆盖率的应用程序框架。我们尚未确定其是否适合作为框架,但希望能得到一些反馈意见。您可以复制此框架并试用
git clone https://github.com/l0gicgate/Slim-Skeleton.git
git checkout 4.x
Slim 4 MVC 框架
@adriansuter 创建了一个 MVC 框架。您可以复制此框架并试用
git clone https://github.com/adriansuter/Slim4-Skeleton.git