Slim 4.0.0 发布

我们很高兴地宣布 Slim 4.0.0 发布。请将您对本次发布的所有反馈直接发送至 Slim 4 发布反馈主题。新文档位于 此处

Build Status Coverage Status

支持的 PSR-7 实现 CI 状态

  • Slim Slim PSR-7
  • Nyholm Nyholm
  • Guzzle Guzzle
  • Zend Zend

注意: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 访问 routeroutingResults 属性,那么您需要将此中间件添加到最后,因为在运行应用程序时,它将在队列中首先执行。中间件队列仍按照后进先出 (LIFO) 顺序执行。这将替换 determineRouteBeforeAppMiddleware 设置。
  • 现在通过 Slim\Middleware\OutputBufferingMiddleware 执行输出缓冲。这将替换 outputBuffering 设置。
  • 现在通过 Slim\Middleware\ContentLengthMiddleware 计算内容长度标头。这将替换 addContentLengthHeader 设置。
  • RouterInterface 组件已拆分为 4 个接口 RouteCollectorInterfaceRouteParserInterfaceRouteResolverInterfaceDispatcherInterface
  • 双通道中间件已弃用。中间件签名现在是 PSR-15 MiddlewareInterface 签名 process(Request $request, RequestHandler $handler)。不再支持双通道 function ($request, $response, $next) 签名。您仍可以使用具有 function (Request $request, RequestHandler $handler) {} 签名的回调函数来创建中间件或使用具有该签名的可调用类。
  • Slim App 现在实现了 PSR-15 RequestHandlerInterface。使用 $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,即 HttpBadRequestExceptionHttpForbiddenExceptionHttpInternalServerErrorExceptionHttpMethodNotAllowedExceptionHttpNotFoundExceptionHttpNotImplementedExceptionHttpUnauthorizedException。您还可以通过扩展HttpExceptionHttpSpecializedException来创建自己的异常。
  • 现在在用户 App::map() 时,请求方法名称区分大小写。
  • 所有特性均已被移除。 CallableResolverTraitMiddlewareAwareTrait 不再存在。
  • 已推出两个新工厂。 AppFactoryServerRequestCreatorFactory 以简化 AppServerRequest 创建。我们目前支持 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 简化内部中间件 ErrorMiddlewareRoutingMiddleware 的排队
  • #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-7Nyholm PSR-7 Server

composer require nyholm/psr7 nyholm/psr7-server

Guzzle PSR-7Guzzle 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