Slim 3 Beta 1

我们已标记 Slim 3 的 beta 1 版本,并已开始发布 3.0 的第一个稳定版本。我们还着手处理新的文档

我们真切地希望 Slim 3 成为一个稳定且易于使用的框架。请报告您发现的所有问题。另外请注意,虽然我们希望无需更改任何函数签名,但我们不承诺在 3.0 稳定版本发布之前会保持向后兼容性。

如需开始,您可以按照安装说明进行操作,或使用Rob Allen框架应用程序

新功能

Slim 3 是一个重大更新,其中的所有部分都已更新。以下是重点内容。

依赖注入

\Slim\App类构成了一个实现container-interop的依赖注入容器。默认情况下,我们发布的是Pimple,但可以将其换成您自己首选的 DI 容器。DI 容器意味着我们可以轻松地将第三方组件注入 Slim 应用程序中,或覆盖 Slim 的内部对象,例如请求和响应对象。

PSR-7 支持

Slim 的 HTTP 请求和响应抽象支持PSR-7。这意味着其接口与之前的版本有很大不同。过去,每个 Slim 应用程序都有一个请求对象和一个响应对象,它们会在整个应用程序中按引用传递。

然而,第 3 个版本将请求和响应对象视为“值对象”。每个中间件层和应用程序路由将以自变量的形式接收最新的请求和响应对象。每个中间件层和路由回调负责“返回”一个已更新的 HTTP 响应对象。

HTTP 请求和响应对象也是“不可变的”。您必须使用适当的withStatus()withHeader()withBody()等请求和响应对象方法才能创建一个并返回一个具有指定更改的新请求或响应对象。您可以在https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md的 PSR-7 文档中阅读更多有关新接口的信息。

这也使得第三方中间件可以使用 Slim Framework。例如,也许您找到了适用于其他框架的 PSR-7 中间件。然而,通过使用 PSR-7 接口,该中间件也可以与 Slim 兼容。

Slim 的 PSR-7 更改听起来可能很复杂,但实际上相当简单。您可以在

已编码到某个界面

3.0 版本(在很大程度上)已针对所有内部应用方法编制代码,使其期望使用到界面而不是具体类实现。这意味着,如果你愿意,你可以轻松地为 Slim 应用的任何依赖项提供自己的实现,而且你可以使用 DI 容器服务注入或覆盖依赖项。

路由回调绑定

如果你使用闭包作为路由回调例程,则这些闭包将绑定到 \Slim\App 实例。这意味着你将可以通过 $this 关键字在闭包内部访问应用实例。

<?php
$app = new \Slim\App();
$app->get('/hello/{name}', function ($request, $response, $args) {
    $url = $this->router->pathFor('hello', ['name' => 'Josh']);

    return $response;
})->setName('hello');

更简单的代码库

此框架代码库更加简单。之前,\Slim\App 类包含涉及渲染或响应头部的很多方法。现在已经不是这种情况了,因为这些方法已被迁移到其他合适的类中。例如,\Slim\App::contentType()\Slim\App::status() 已被移除,你必须使用响应对象的方法来修改 HTTP 响应。Slim 不再附带视图或记录器对象,让你可以选择最适合自己需求的组件。当然,我们会继续通过 Twig-View 提供与 Twig 模板组件的集成。

接下来是什么?

我们认为 Slim 3 beta 1 已包含我们对 3.0 版本构想的各种关键变动,因而我们现在正专注于稳定性和错误修复。当我们满意时,我们将发布 3.0 的第一个稳定版本。